我想创建一个依赖 HSV 过滤的黑白图像。然而,在将图像从 BGR 转换为 HSV 并应用该inRange()方法后,该矩阵被简化为单通道矩阵(值为0或255)并且无法转换回 BGR。有没有简单的方法来解决这个问题?我什至需要反向转换的步骤,还是可以以某种方式显示带有我所拥有信息的新图像?我对 OpenCV还很陌生,并且已经发现了一个非常相似的问题,但我仍然对该怎么做感到困惑。例子:System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Mat img = Imgcodecs.imread(path);Mat hsv = new Mat();Mat img_new = new Mat(); Imgproc.cvtColor(img,hsv,Imgproc.COLOR_BGR2HSV);Core.inRange(hsv, new Scalar(hue,saturation,value),new Scalar(hue,saturation,value),hsv);Imgproc.cvtColor(hsv, img_new, Imgproc.COLOR_HSV2BGR); // This line doesn't work.// display new image in JFrameMatOfByte mob = new MatOfByte();Imgcodecs.imencode(".tif", img_new, mob);byte ba[] = mob.toArray();BufferedImage bi = ImageIO.read(new ByteArrayInputStream(ba));newImgLabel.setIcon(new ImageIcon (bi));
1 回答

呼啦一阵风
TA贡献1802条经验 获得超6个赞
inRange 函数为您提供了一个蒙版(实际上是一个值为 0 和 255 的单通道图像),您可以使用它来选择要选择的区域。
Mat mask = new Mat();
Imgproc.cvtColor(img,hsv,Imgproc.COLOR_BGR2HSV);
Core.inRange(hsv, new Scalar(hue,saturation,value),new Scalar(hue,saturation,value),mask);
img.copyTo(img_new, mask);
添加回答
举报
0/150
提交
取消