我想选择从粉红色到黄色的颜色范围,并将该范围放入 inRange() 函数中。然而我只能分别从粉色到红色和红色到黄色中选择。
对于粉色到红色,H 值是从 125 到 255,那么 红到黄是0到10。
我应该输入的范围值是多少?
更新#1
范围内的使用方式是
Core.inRange(mRgba, new Scalar(0, 100, 30), new Scalar(10, 255, 255), YellowMat); Core.inRange(mRgba, new Scalar(125, 100, 30), new Scalar(255, 255, 255), PinkMat);
标量不接受大于 255 的值。
最佳答案
或者,您可以对每个 H 值进行左循环移位 125。此后粉色到红色为 0-130,红色到黄色为 131-141 -> 范围为 0-141。在 inRange() 之后,不要忘记旋转回 H channel 。
更新#1:
好吧,所以还有更多选择。首先:
Core.inRange(mRgba, new Scalar(0, 100, 30), new Scalar(10, 255, 255), yellowMat);
Core.inRange(mRgba, new Scalar(125, 100, 30), new Scalar(255, 255, 255), pinkMat);
Core.bitwise_or(yellowMat, pinkMat, pinkToYellowMat);
其次,您可以使用 CV_BGR2HSV_FULL 计算 0..255 范围内的色相 channel ,然后可以“旋转”图像的颜色,这样:
Imgproc.cvtColor(imageBgr, imageHsv, CV_BGR2HSV_FULL);
Core.add(imageHsv, new Scalar(-125, 0, 0), imageHsv);
Core.inRange(imageHsv, new Scalar(0, 100, 30), new Scalar(141, 255, 255), pinkToYellowMat);
我无法尝试这些示例。第二个可能不起作用,你写道
Scalar doesn't accept value that's greater than 255
而且我不确定它是否可以接受小于零的值。
关于java - Opencv HSV颜色范围选取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28206032/