2012-05-30 2 views
4

У меня этот код:OpenCV findContours аварии

mat.copyTo(tmpMat); 
cvtColor(tmpMat, tmpMat, CV_BGR2GRAY); 
cv::equalizeHist(tmpMat, tmpMat); 
    cv::Mat browMat = tmpMat(eyebrowRect); 
    std::vector<std::vector<Point> > contours; 
    cv::findContours(browMat, contours, cv::RETR_LIST, cv::CHAIN_APPROX_NONE); 

, но он выходит из строя с этой ошибкой:

OpenCV Error: Assertion failed (type == type0 || (CV_MAT_CN(type) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0)) in create, file /Users/robin/Projects/OpenCVForiPhone/opencv/opencv/modules/core/src/matrix.cpp, line 1249 terminate called throwing an exception

Я думаю, что мой Mat уже в 1-канальном серой шкалы из-за cvtColor звоните ...

Как это исправить?

+0

Как вы ожидаете, что cvtColor будет работать на месте для преобразования с 3-канального на 1-канальное изображение? –

+0

Я использую слишком cv :: adaptiveThreshold, который преобразует в 1channel изображение, я думаю ... Если я ошибаюсь, скажите, пожалуйста, как я могу получить 1-канальное изображение с моего мата. – Progeny

+1

@Progeny. Вы должны принять ответ если он решил вашу проблему –

ответ

9

Вместо:

std::vector<std::vector<Point> > contours; 

вы пробовали?

std::vector<std::vector<cv::Point> > contours; 
+0

Я заменил Point for CvPoint, потому что не нашел времени, чтобы правильно прочитать ошибку компилятора. Переход на cv :: Point сделал трюк для меня. – charshep

Смежные вопросы