FindContours error 'поддерживает только изображения 8uC1' - программирование

FindContours error 'поддерживает только изображения 8uC1'

Попытка запустить 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, 

Любые идеи? Благодаря

4b9b3361

Ответ 1

Из документация:

С++: 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);