我是 openCV 的新手。我已经能够计算带有 mask 的图像的绿色和黄色像素。我想知道 openCV 中 Brown 的 HSV 范围是多少。
private void testBrownPixelCount(Mat originalMat) {
if(isMatEmpty(originalMat)){
Log.i(TAG, "Empty Original Mat at testBrownPixCoutn()");
}else{
//Perform:
Mat maskMat = Imgcodecs.imread(testFilePath);
Mat bgr = new Mat();
Imgproc.cvtColor(maskMat, bgr, Imgproc.COLOR_BGR2RGB);
Mat maskMatHsv = new Mat();
Imgproc.cvtColor(bgr, maskMatHsv , Imgproc.COLOR_RGB2HSV);
//iF NOt; use RGB2HSV:
Mat brownMat = new Mat();
Scalar min_brown = new Scalar(20,100,100);
Scalar max_brown = new Scalar(30,255,255);
Core.inRange(maskMatHsv, min_brown, max_brown, brownMat);
Log.i(TAG, "Brown Mat Non-zeros:" + Core.countNonZero(brownMat));
Bitmap bitmapMat = Bitmap.createBitmap(brownMat.cols(), brownMat.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(brownMat, bitmapMat);
imgView_testView.setImageBitmap(bitmapMat);
}
结果是黑色的 imageView,它甚至无法检测到黄色的。
最佳答案
可以看看我的回答here其中深入介绍了如何绘制/查看一系列不同的 HSV 值。
您还可以查看外部站点,这些站点可以让您尝试使用值来了解色彩空间。在 HSV 中,棕色对应于较高的饱和度级别(较低的值变得更灰)和中等值的级别(低是黑色,高是白色),并且色调介于(大约)20 度之间的红砖颜色到 40 度之间沙色。但在 OpenCV 中,色调度数除以 2 以使其适合 255 以下,因此色调值更像是 10 到 20。
使用链接答案中的代码,我生成了从 [10, 100, 20]
到 [20, 255, 200]
在 HSV 中:
这似乎涵盖了棕色的大部分想法,但如果您想要一些更深、更亮、更灰等的颜色出现,您可以使用这些值。
寻找好的阈值的另一种方法是创建一个让您尝试的程序。例如,我 built a tool在 python 和 OpenCV 中类似于 photoshop 中的魔术棒选择器,它允许您定义一个阈值,单击一个像素,它会选择与您单击的位置相连的相似颜色的像素。该工具将打印出最高和最低颜色值,还将打印出平均颜色和标准偏差,以便更好地控制与您选择的颜色相似的阈值。您可以看到它被使用的一些 gif
here .
另一种处理值的方法是使用 OpenCV 创建轨迹栏,提供所有最小和最大阈值,并在每次更改值时使用阈值图像更新屏幕。我 built a tool为此,在 python 和 OpenCV 中也是如此。您可以看到它被使用的一些 gif
here .
如果您仔细阅读这两个项目的代码,您可以了解如何构建类似的程序来摆弄值,以便更舒适地在不同的色彩空间中工作。
关于java - openCV 中 BROWN 颜色的 HSV 值范围是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46112326/