我试图将bgr mat转换为hsv mat进行一些检测,但hsv图像总是出现块状。这里是我在C++中的代码:在opencv中将bgr转换为hsv时出现块状行为
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时,输入不显得块状。有什么问题,我该怎么做才能解决它?
在转换之前,图像可能是块状的,但它很难检测到。 JPEG/MPEG压缩正在利用我们的“视觉管道”的不完善性,并因此产生许多难以检测到的伪影。当您用假彩色(例如HSV通道)显示图像时,它们有时变得非常明显。您可以将图像保存为无损格式(png/tiff),并使用颜色检查器调查实际值。 –
我甚至可以在3.0(主)中重现。也与不同的摄像头型号/驱动程序。它只发生在网络摄像头捕获,而不是imread()。不错的谜题;) – berak
@scribblemaniac,你可能想[在这里提出问题](http://code.opencv.org/projects/opencv/issues) – berak