gpt4 book ai didi

c++ - 在 opencv 中将 bgr 转换为 hsv 时的 block 状行为

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:11 32 4
gpt4 key购买 nike

我正在尝试将 bgr mat 转换为 hsv ma​​t 以进行某些检测,但 hsv 图像不断出现 block 状。这是我在 C++ 中的代码:

int main() {
const int device = 1;
VideoCapture capture(device);
Mat input;
int key;
if(!capture.isOpened()) {
printf("No video recording device under device number %i found. Aborting program...\n", device);
return -1;
}
namedWindow("Isolation Test", CV_WINDOW_AUTOSIZE);
while(1) {
capture >> input;
cvtColor(input, input, CV_BGR2HSV);
imshow("Isolation Test", input);
key = static_cast<int>(waitKey(10));
if(key == 27)
break;
}
destroyWindow("Isolation Test");
return 0;
}

Here是输出结果的快照。当我注释掉 cvtColor 时,输入看起来并不 block 状。问题是什么,我应该如何解决?

最佳答案

我在评论部分提出了解释,但决定实际验证我的假设并解释一些关于 HSV 颜色空间的信息。

代码和OpenCV的cvtColor都没有问题。 RGB 图像中存在“ block 状”瑕疵,但不明显。所有 JPEG 系列压缩算法都会产生这些伪影。我们通常看不到它们的原因是算法“利用”了我们视觉系统中的弱点并压缩了更多我们不太敏感的东西。

我使用 OpenCVscvtColor` 将图像转换回 RGB,伪像神奇地消失了(图像如下)。

HSV 颜色空间尤其具有几个夸大这些伪像的特征。其中重要的可能是 V channel (值/亮度)非常低的地方,HS channel 非常低不稳定并且毫无意义。在极端情况下:[128,255,0] == [0,0,0]

因此,图像暗区中非常小且不明显的压缩伪影在 HSV 颜色空间的假色中变得非常突出。

如果您想使用 HSV 颜色空间作为颜色比较的特征空间,请记住如果 V 非常低,H & S 是毫无意义的。对于使 H 值变得毫无意义的非常低的 S 值也是如此 ([0,0,100] == [128,0,100]) .

顺便说一句。还要记住,H channel 是循环的,H == 0H == 255 之间的区别只是一个灰度级。

  • 伪色“ block 状”HSV 问题中发布的图像 HSV image posted by @scribblemaniac
  • 使用 cvtColor 将图像转换回 RGB Same image after conversion back to RGB

关于c++ - 在 opencv 中将 bgr 转换为 hsv 时的 block 状行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029451/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com