先把图片转成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 |