使用OpenCV和C ++从图像中提取每个HSV值

时间:2019-01-15 14:25:54

标签: c++ opencv hsv

我使用下面的代码从任何图像中提取每个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

但是,我仍然不知道如何解决它。

任何帮助将不胜感激!谢谢!

0 个答案:

没有答案