先把图片转成hsv模式,然后再判断。
inRange 这个方法,判断输入的mat每个像素是否在范围内,如果在就返回白色,不在返回黑色,最后会输出一个黑白的mat图片。
int iLowH = 78;
int iHighH = 99;
int iLowS = 43;
int iHighS = 255;
int iLowV = 46;
int iHighV = 255;
Mat m = new Mat();
Utils.bitmapToMat(bitmap_src, m);
Mat hsv=new Mat();
//android上的是RGBA,所以先转成BGR
Imgproc.cvtColor(m,hsv,Imgproc.COLOR_RGBA2BGR);
Imgproc.cvtColor(hsv,hsv,Imgproc.COLOR_BGR2HSV);
Mat r=new Mat();
Core.inRange(hsv, new Scalar(iLowH, iLowS, iLowV), new Scalar(iHighH, iHighS, iHighV),r);
参照表
| 黑 | 灰 | 白 | 红 | 橙 | 黄 | 绿 | 青 | 蓝 | 紫 | |
hmin | 0 | 0 | 0 | 0 | 156 | 11 | 26 | 35 | 78 | 100 | 125 |
hmax | 180 | 180 | 180 | 10 | 180 | 25 | 34 | 77 | 99 | 124 | 155 |
smin | 0 | 0 | 0 | 43 | 43 | 43 | 43 | 43 | 43 | 43 | |
smax | 255 | 43 | 30 | 255 | 255 | 255 | 255 | 255 | 255 | 255 | |
vmin | 0 | 46 | 221 | 46 | 46 | 46 | 46 | 46 | 46 | 46 | |
vmax | 46 | 220 | 255 | 255 | 255 | 255 | 255 | 255 | 255 | 255 |