16

尝试在二进制图像上运行 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, 

有任何想法吗?谢谢

4

1 回答 1

23

文档中

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);
于 2012-11-02T22:46:50.507 回答