我想选择从粉红色到黄色的颜色范围,将范围放在inRange()函数中。但是我只能分别从粉红色到红色和红色到黄色。
对于粉红色到红色,H值从125到255,然后 红色到黄色是0到10。
我应该放入的范围值是多少?
更新#1
在范围内使用的方式是
Core.inRange(mRgba,new Scalar(0,100,30),new Scalar(10,255,255),yellowMat); Core.inRange(mRgba,新标量(125,100,30),新标量(255,255,255),pinkMat);
Scalar不接受大于255的值。
答案 0 :(得分:1)
或者,您可以对每个H值进行左循环移位125.此后粉红色到红色是0-130,红色到黄色131-141 - >范围是0-141。在inRange()之后不要忘记旋转H频道。
更新#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范围内的Hue通道,然后可以旋转图像的颜色,以便:
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不接受大于255的值
并且我不确定它是否可以接受小于零的值。