java 基于OpenCv图像处理
本文依然使用javaCv封装的openCv,使用方式看第一章
2、灰度加载、子矩阵、轮廓检测
2.1、灰度加载
public static void main(String[] args) {
Mat mat = opencv_imgcodecs.imread("D:\\leiningen\\cat.jpg",opencv_imgcodecs.IMREAD_GRAYSCALE);
ImageViewer imageViewer = new ImageViewer(mat);
imageViewer.imshow();
}
原图片:
灰度加载如下图:
IMREAD_REDUCED_COLOR_4和IMREAD_REDUCED_GRAYSCALE_4,一个是color一个是grayscale,一个以灰度,0或1方式加载,一个是RGB红绿蓝方式加载后面的4是缩放比例可以是2,4,8。
2.2、子矩阵
在openCv可以用submat函数获得子矩阵,javaCv中我是使用了apply。
public static void main(String[] args) {
Mat mat = opencv_imgcodecs.imread("D:\\leiningen\\test.jpg");
Rect rect = new Rect(740, 20, 550, 700);
Mat apply = mat.apply(rect); //切割
opencv_imgcodecs.imwrite("D:\\leiningen\\test1.jpg",apply);
}
2.3、轮廓检测
在这里使用canny函数,先检测出图片中的物体轮廓,最后在高亮显示图像中的物体。
public static void main(String[] args) {
Mat mat = opencv_imgcodecs.imread("D:\\leiningen\\cat.jpg",opencv_imgcodecs.IMREAD_REDUCED_COLOR_4);
opencv_imgproc.cvtColor(mat,mat,opencv_imgproc.COLOR_RGB2GRAY);
/**
* 轮廓监测方法
* src dist 低阈值 高阈值 光圈 3--7之间奇数,数值越大监测轮廓越多 L2梯度 设置为true
*/
opencv_imgproc.Canny(mat,mat,180,300,3,true); //检测
Mat clone = mat.clone(); //克隆
opencv_core.bitwise_not(clone,clone); //掩膜高亮
opencv_imgcodecs.imwrite("D:\\leiningen\\cat1.jpg",clone);
}
轮廓检测后掩膜高亮如下图所示: