

OpenCV Java入门三 Mat的基本操作
source link: https://blog.csdn.net/lifetragedy/article/details/123708839
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

环境好了,我们就可以进入正文了。
在之前入门一、二中分别已经有画图的两个例子了。但没有细节展开我们的代码和OpenCV到底在干什么。
使用OpenCV时你需要补充的知识
你需要熟练使用Java Swing,或者是其它任何一门语言中关于GUI方面的编程。
我们这用的是OpenCV Java,因此对于Java Swing必须熟练。你可以安装eclipse 中的windowbuilder来帮助你做Swing的编程。
至于Java Swing中的界面、Frame、Panel、Button以及Layout,这块在“JDK核心技术卷1、卷2”中已有详细描述,我就不多此一举了。
Mat对象
OpenCV用来存储图像,很多时候都会用到这个Mat方法。数字图像可看做一个数值矩阵, 其中的每一个元素表明一个像素点。Mat在 OpenCV 中表示的是 N 维稠密矩阵,与稠密矩阵相对的是稀疏矩阵(只存储非零的像素值)。
Mat 类包含两部分,一是 矩阵头 (matrix header),二是 矩阵指针 (pointer to matrix),部分矩阵头以下:blog
int flags; // signaling the contents of the matrix
int dims; // dimensions
int rows, cols; // rows and columns
MatSize size; //
MatStep step; //
具体不作进一步展开,但我们要会使用这个Mat。
因此今天以Mat来做几个小练习。
Mat划线

记得OpenCV上手都有一句“System.loadLibrary(Core.NATIVE_LIBRARY_NAME);”,是因为OpenCV Java虽然使用的是“opencv-343.jar”,实际它会去调用“opencv_java343.dll”,并且opencv_java343.dll有依赖,它会去找它自己在Windows的控制面板->系统变量->path中的依赖的那些opencv编译出来的包。
我不喜欢把opencv_java343.dll所依赖的这些DLL放到windows的安装目录的System32目录下。
因为你把这些dll放在system32目录下,和你直接在System的path下加入这些dll效果是一样的。


HighGui是一个OpenCV自带的“内嵌面板”。
有时我也会自己写JFrame来做“展示”。如下面这个例子。
Mat在己有图片上加圆圈
ImageShowAddCircle.java
ImageViewer.java
它显示的效果如下:
它会在一个图片上(未加圆圈前)

显示带两个圆圈的画(加了圆圈后)

Mat与Image互转
由于我们经常使用Swing组件,Swing中有一个imageView.setIcon方法或者是setImage方法,它要求的是输入一个java.awt.Image对象。
那么Mat和Image经常会互转,因此我们有一套互转的小工具类如下:
OpenCVUtil.java
Mat使用blur图片
它把一张原来的未blur处理的图片,变成了如下这样

结束今天的博客,下一篇会讲“认脸”。认脸和识脸是两个课题,我们一步步来。目前网上99%的教程只能到达认脸这一步,即这是一个脸。但不代表这是谁?这是谁就叫“识脸”。
Recommend
-
35
-
40
-
66
阅读本文大概需要6分钟。 上一篇文章
-
20
基础入门的知识一直没有更新完,今天小张接着给大家带来入门级的字符串的常用操作。本文适合刚入门的小白,大佬们请绕过。 一、定义 字符串的意思就是“一串字符”,比如“Hello,Charlie”是一个字符串,“How are you?”也是...
-
9
OpenCV网上讲的一个都不对,要么卡死电脑,要么训练模型写死,要么都只是显示显示人脸就说入门了。没有一个从安装、使用、驱动摄像头、训练模型、辩别人脸的全过程。...
-
4
LIST OF MAT TYPE IN OPENCV from http://ninghang.blogspot.com.es/2012/11/list-of-mat-type-in-opencv.html credit to:
-
8
经过前三个教程,我们可以知道了OpenCV的基本使用了。 今天,我们就要讲OpenCV中认出,这是一个人脸是怎么做的。 MatOfRect.detectMultiScale函数
-
7
OpenCV Java入门二 在Windows10系统上安装OpenCV ...
-
5
OpenCV Java入门五 结合摄像头识脸和拍照 ...
-
2
opencv-python 2 图像基本操作
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK