OpenCV imshow bug? - 像素颜色

时间:2012-12-22 22:49:32

标签: c++ image-processing opencv

我花了半天时间找到错误。最后我发现了这个奇怪的事情:

在我的代码方法1的一部分中,我执行以下操作:

Mat prevgray, gray, flow, cflow, frame;
cvtColor(frame1, prevgray, CV_BGR2GRAY);
cvtColor(frame2, gray, CV_BGR2GRAY);
calcOpticalFlowFarneback(prevgray, gray, flow, 0.5, 3, 15, 3, 5, 1.2, 0);
...

在方法2的另一部分,我创建新的Mat并尝试显示它:

Mat result(480,640, CV_8UC3);
result.at<cv::Vec3b>(y,x)[0] = b;
result.at<cv::Vec3b>(y,x)[1] = g;
result.at<cv::Vec3b>(y,x)[2] = r;
namedWindow( "jojw", CV_WINDOW_AUTOSIZE );
imshow("jojw",result);
waitKey(0);

结果是这张图片:

enter image description here

但是,如果我不使用calcOpticalFlowFarneback方法。我注释掉它或在代码到达之前返回。结果图片没问题。

发生了什么事?

请帮帮我

1 个答案:

答案 0 :(得分:1)

解决了自己。花了12个小时才得到这个愚蠢的错误。那是错误吗?我仍然不明白,但解决方案是创建零码:

Mat result = Mat::zeros(480,640, CV_8UC3);