尝试在二进制图像上运行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,
有什么想法吗? 感谢
答案 0 :(得分:22)
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);