我試圖將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