0

我正在使用 opencv 来查找轮廓,并在图像帧上显示每个轮廓,我已经看到了使用将轮廓转换为矩形的示例

`boundingRect( Mat(contours_poly[i]) );`

所以我认为可以工作 cv::imshow("parking2", Mat(contours[i]));

cv::findContours(img_resized,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
cout<<"contour size   "<<contours.size()<<endl;
for(int i = 0;i <contours.size();i++){
  cv::imshow("parking2", Mat(contours[i]));
}

但最终,它不起作用,给了我错误 - OpenCV 错误:通道数错误(源图像必须有 1、3 或 4 个通道)

注意:原始图像是灰度图像,不是 RGB 图像。

4

1 回答 1

0

抱歉前几天懒惰/不清楚,但是即使您将轮廓点列表放入垫子中,也不会使其成为图像。应该是:

Rect br = boundingRect( contours_poly[i] ); // the rect containing all points of the contour

Mat cropped(img_resized, br);               // the cropped part of the original image 

imshow( "parking2", cropped );              // show cropped part only

此外,如果您在循环中使用相同的窗口名称重复调用 imshow,您将只会看到最后一张图片,因为一个调用会覆盖另一个调用

于 2013-10-17T09:47:38.523 回答