我正在使用opencvandroidsdk开发一个用于颜色检测的android项目。我已经能够从图像中分离出绿色和棕色的遮罩,但是我想要图像中绿色和棕色的百分比。我不知道该怎么做。
oImage = imread(pathOfFile);
hsvImage = new Mat();
color_range1 = new Mat();
color_range2 = new Mat();
Imgproc.cvtColor(oImage, hsvImage, Imgproc.COLOR_BGR2HSV);
Core.inRange(hsvImage, new Scalar(25,52,72), new Scalar(102,255,255), color_range1); // Green
Core.inRange(hsvImage, new Scalar(10, 100, 20), new Scalar(20, 255, 200), color_range2); // Brown
// I have the Green and Brown mask in color_range1 and color_range2 respectively.
// Now what
color_range1.release();
color_range2.release();
hsvImage.release();
oImage.release();
我有一个可行的解决方案的python实现,但不知道如何将其转换为java。
img = cv2.imread("__FILE_PATH__")
grid_HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_green = np.array([25,52,72])
upper_green = np.array([102,255,255])
lower_brown = np.array([10, 100, 20])
upper_brown = np.array([20, 255, 200])
mask= cv2.inRange(grid_HSV, lower_green, upper_green)
brown_mask= cv2.inRange(grid_HSV, lower_brown, upper_brown)
Green Percent - round(((mask>0).mean())*100,3)
Brown Percent - round(((brown_mask>0).mean())*100,3)
1条答案
按热度按时间brtdzjyr1#
你可以像这里提到的那样一个接一个地读取图像中的每个像素,然后对它们进行计数。
note:the channel(像素)值根据您的inrange标量限制确定。