Java OpenCV选择灰色范围
阅读这些教程(&)后,我可以了解如何使用Java OpenCV选择灰色范围,java,opencv,Java,Opencv,阅读这些教程(&)后,我可以了解如何使用HSV图像或OpenCVMat的色调值提取任何颜色范围,包括红色、绿色、蓝色和黄色。但是,该值无法描述我需要选择的灰色。那么,是否有任何方法可以使用OpenCV提取图像的灰度像素?在HSV/HSL颜色空间中,灰度像素的特征是饱和度为零或非常接近零,因此测试将通过灰度到白色像素来区分黑色。然后,值/亮度将告诉您从黑色到白色的比例到底有多远,低亮度/值表示深灰色,而高亮度/值表示浅灰色 在RGB颜色空间中,灰色像素的特征是所有三个颜色分量相等,即R=G=B.经
HSV
图像或OpenCV
Mat的色调值提取任何颜色范围,包括红色、绿色、蓝色和黄色。但是,该值无法描述我需要选择的灰色。那么,是否有任何方法可以使用OpenCV
提取图像的灰度像素?在HSV/HSL颜色空间中,灰度像素的特征是饱和度为零或非常接近零,因此测试将通过灰度到白色像素来区分黑色。然后,值/亮度将告诉您从黑色到白色的比例到底有多远,低亮度/值表示深灰色,而高亮度/值表示浅灰色
在RGB颜色空间中,灰色像素的特征是所有三个颜色分量相等,即R=G=B.经过几个注释,并且知道:
- 要从HSV图像通道中获得白色到深灰色,您应该同时具有以下值
,Hue 0到360
,Sat 0到10
(检查以测试您自己的颜色范围)Val 50到100
inRange函数不支持处理这样的HSV颜色组合OpenCV
Mat hueMask1 = new Mat();
Mat satMask2 = new Mat();
Mat valMask3 = new Mat();
Mat white2GrayMask = new Mat();
Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2HSV);
List<Mat> channels_HSV = new ArrayList<>();
Core.split(image,channels_HSV);
Core.inRange(channels_HSV.get(0),new Scalar(0),new Scalar(180),hueMask1);
Core.inRange(channels_HSV.get(1),new Scalar(0),new Scalar(20),satMask2);
Core.inRange(channels_HSV.get(2),new Scalar(70),new Scalar(255),valMask3);
Core.bitwise_and(hueMask1,satMask2,white2GrayMask);
Core.bitwise_and(white2GrayMask,valMask3,white2GrayMask);
Mat hueMask1=new Mat();
Mat satMask2=新Mat();
Mat valMask3=新Mat();
Mat white2GrayMask=新Mat();
Imgproc.cvtColor(图像,图像,Imgproc.COLOR_BGR2HSV);
列出频道\u HSV=new ArrayList();
Core.split(图像、频道和HSV);
Core.inRange(通道获取(0)、新标量(0)、新标量(180)、hueMask1);
Core.inRange(通道获取(1)、新标量(0)、新标量(20)、satMask2);
Core.inRange(通道获取(2)、新标量(70)、新标量(255)、valMask3);
按位_和(hueMask1、satMask2、white2GrayMask);
按位_和(white2GrayMask、valMask3、white2GrayMask);
也许可以看看这里的讨论:谢谢@Peter,虽然这不是答案,但它给了我一个想法,感谢您提供的宝贵信息。我真的知道所有这些,但仍然没有解决问题。我在问如何使用OPENCV实现灰色选择!!您可以安全地省略hueMask1
,因为正如您自己所说,所有色调都在0到180之间。