我们可以将图像的BGR颜色空间转换到HSV颜色空间,然后基于HSV颜色空间对图片颜色处理
HSV表示Hue, Saturation, Value,其中Hue范围0~180,Saturation范围0~255,Value范围0~255
那么我们怎么根据HSV颜色空间提取图像中的颜色呢?这里有一个指导(在具体实践中,我们可以根据HSV的直方图作参考)
这里的例子是提取图像中的苹果1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public static void main(String[] args) {
Mat img = Imgcodecs.imread("data/apple.jpg");
Mat imgHSV = new Mat(img.rows(), img.cols(), CvType.CV_8UC3);
// RGB->HSV
Imgproc.cvtColor(img, imgHSV, Imgproc.COLOR_BGR2HSV);
Scalar lower_hsv = new Scalar(0,90,70);
Scalar upper_hsv = new Scalar(15,230,255);
Mat mask = new Mat();
Core.inRange(imgHSV, lower_hsv, upper_hsv, mask);
Mat blackImg = new Mat();
Core.bitwise_and(img, img, blackImg,mask);
HighGui.imshow("原图", img);
HighGui.imshow("mask", mask);
HighGui.imshow("颜色过滤", blackImg);
HighGui.waitKey(0);
System.exit(0);
}