操作3"/>
java opencv 基本操作3
//通道合并public void TestMerger() {Mat src = GeneralUtils.converMat("C:\\图片\\test\\0001.jpg");List<Mat> mv = new ArrayList<Mat>();//蓝色通道为0Core.split(src, mv);mv.get(0).setTo(new Scalar(0));Mat dst1 = new Mat();//合并通道Core.merge(mv, dst1);GeneralUtils.saveByteImg(dst1, "C:\\图片\\test\\dst1.jpg");//绿色通道为0Core.split(src, mv);Mat dst2 = new Mat();mv.get(1).setTo(new Scalar(0));//合并通道Core.merge(mv, dst2);GeneralUtils.saveByteImg(dst1, "C:\\图片\\test\\dst2.jpg");//红色通道为0Core.split(src, mv);Mat dst3 = new Mat();mv.get(2).setTo(new Scalar(0));Core.merge(mv, dst3);GeneralUtils.saveByteImg(dst1, "C:\\图片\\test\\dst3.jpg");}//cvtcolor()函数是一个颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间转换。也可以转换为灰度图。//void Imgproc.cvtColor(// Mat src, // 输入序列// Mat dst, // 输出序列// int code, // 颜色映射码// int dstCn = 0 // 输出的通道数 (0=‘automatic’)// );//OpenCV中的inRange()函数可实现二值化功能(这点类似threshold()函数),可以同时针对多通道进行操作!// inRange(Mat src, Scalar lowerb, Scalar upperb, Mat dst)//官方文档中的解释:Checks if array elements lie between the elements of two other arrays.即检查数组元素是否在另外两个数组元素值之间。这里的数组通常也就是矩阵Mat或向量。请注意:该函数输出的dst是一幅二值化之后的图像。//使用示例1:针对单通道图像//dst(I) = lowerb(I)0 ≤ src(I)0 < upperb(I)0//即,如果一幅灰度图像的某个像素的灰度值在指定的高、低阈值范围之内,则在dst图像中令该像素值为255,否则令其为0,这样就生成了一幅二值化的输出图像。public void testCvColor() {Mat src = GeneralUtils.converMat("C:\\图片\\test\\0001.jpg");//RGB转换成HSVMat hsv = new Mat();Imgproc.cvtColor(src, hsv, Imgproc.COLOR_BGR2HSV);GeneralUtils.saveByteImg(hsv, "C:\\图片\\test\\hsv.jpg");//RGB转换成YUVMat yuv = new Mat();Imgproc.cvtColor(src, yuv, Imgproc.COLOR_BGR2YUV);GeneralUtils.saveByteImg(yuv, "C:\\图片\\test\\yuv.jpg");//inRange函数示例Mat hsv2 = new Mat();Imgproc.cvtColor(src, hsv2, Imgproc.COLOR_RGB2HSV);Mat inRangeMask = new Mat();Core.inRange(hsv2, new Scalar(50, 50, 50), new Scalar(100, 255, 255), inRangeMask);GeneralUtils.saveByteImg(inRangeMask, "C:\\图片\\test\\inRangeMask.jpg");}
程序中的GeneralUtils如下:GeneralUtils
《黄帝内经·素问》
求关注!!
更多推荐
java opencv 基本操作3
发布评论