findContours错误'仅支持8uC1图像'

时间:2012-11-02 22:39:00

标签: image-processing opencv

尝试在二进制图像上运行findContours“

Mat conv(image.size(), CV_8U);
image.convertTo(conv, CV_8U);
vector<vector<cv::Point> > contours;

findContours(conv, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);

抛出错误:

OpenCV Error: Unsupported format or combination of formats ([Start]FindContours support only 8uC1 images) in cvStartFindContours, 

有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:22)

来自the documentation

  

C ++:void Mat :: convertTo(OutputArray m,int rtype,double alpha = 1,double beta = 0)const
     参数:

     

rtype - 所需的输出矩阵类型,或者更确切地说,自数量以来的深度   通道与输入相同;如果rtype为负数,则输出矩阵将与输入具有相同的类型。

您看到convertTo未更改频道数,这意味着您很可能获得3个频道(r,g和b)。但是findContours需要单色图片。

您需要将图像转换为黑白图像:

cv::Mat bwImage;
cv::cvtColor(image, bwImage, CV_RGB2GRAY);
vector< vector<cv::Point> > contours;
cv::findContours(bwImage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);