java 基于OpenCv图像处理_灰度加载、子矩阵、轮廓检测

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();
}

原图片:
java 基于OpenCv图像处理_灰度加载、子矩阵、轮廓检测_第1张图片

灰度加载如下图:
java 基于OpenCv图像处理_灰度加载、子矩阵、轮廓检测_第2张图片

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);
}

轮廓检测后掩膜高亮如下图所示:

java 基于OpenCv图像处理_灰度加载、子矩阵、轮廓检测_第3张图片

你可能感兴趣的:(javaCv,opencv,图像处理,java)