我使用下面的代码从任何图像中提取每个HSV值,并将每个值打印在屏幕上。
Mat image_HSV;
cvtColor(ori_image, image_HSV, CV_BGR2HSV);
Mat mask;
inRange(image_HSV, Scalar(100, 0, 0), Scalar(100, 255, 255), mask);
image_HSV.setTo(Scalar(0, 0, 0), mask);
int h = 0;
int s = 0;
int v = 0;
int col = image_HSV.cols;
int row = image_HSV.rows;
int corow = col * row; // image's full pixel number
for (int i = 0; i < image_HSV.cols; i++) { // image row pixel
for (int j = 0; j < image_HSV.rows; j++) { // image col pixel
Vec3b hsv = image_HSV.at<Vec3b>(i,j);
h += hsv.val[0];
s += hsv.val[1];
v += hsv.val[2];
if (hsv[0] != 100) {
hsv[0] = 0;
hsv[1] = 0;
hsv[2] = 0;
}
}
}
cout << "H: " << h / corow << "% \n";
cout << "S: " << s / corow << "% \n";
cout << "V: " << v / corow << "% \n";
waitKey(0);
return 0;
这次我使用了所有红色图像,其RGB值分别为255、0、0。
但是,我从这段代码中得到了一些奇怪的结果。
据我所知,每个H,S,V值范围分别由0-360、0-100和0-100覆盖。
此外,我还关注了以下链接,但我仍然难以获得正确的价值。
OpenCV (C++) - Set HSV values of a pixel
但是,我仍然不知道如何解决它。
任何帮助将不胜感激!谢谢!