c++ - 使用 OpenCV 和 C++ 从图像中提取每个 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 覆盖。
此外,我还关注了下面链接的帖子,但我仍然无法获得正确的值。
但是,我仍然不知道如何解决它。
任何帮助将不胜感激!谢谢!
解决方案
推荐阅读
- c# - MSSQL拆分字符串函数性能很糟糕
- javascript - ReactJS , setState 发出 onChange 事件
- websphere - 如何得知 WebSphere 应用程序已安装在 Jython 中?
- python - 除 javascript 外,geckodriver 的日期输入问题是否有任何解决方法?
- java - 没有 gitignore 的 JPAMetaModelEntityProcessor
- cmake - 为什么 CMake C/C++ 对待两个二进制库的方式不同?(里面的细节)
- c# - 将各种 xaml 控件存储和添加到 UWP 应用程序(特别是 NavigationView)的好方法是什么
- c - 使用程序的输出作为同一程序的输入
- java - 无法在 Android Studio 3.2 中从 Github 签出项目
- delphi-10.2-tokyo - 无法调整来自 delphi 的 rave 报告中的标签对齐方式