为了账号安全,请及时绑定邮箱和手机立即绑定

Java OpenCV 在 inRange 之后将 HSV 转换回 BGR

Java OpenCV 在 inRange 之后将 HSV 转换回 BGR

茅侃侃 2021-06-14 17:27:16
我想创建一个依赖 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);


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 341 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号