Я использовал пример кода OpenCV findContours чтобы получить контуры.
Успешно получить правильные контуры для это изображение.
Но когда я использую findContours в своем проекте, он получил неправильные данные контуров, например, контур имеет 0 точек, миллионы точек в векторе контуров, а некоторые точки огромны.
Проверенный код в моем списке проектов ниже:
Mat src=imread("data/artists-icon.png",1);
Mat src_gray = Mat::zeros(src.size(), CV_8UC3);
cvtColor(src, src_gray, CV_BGR2GRAY);
imshow("src_gray", src_gray);
Canny(src_gray, src_gray, 100, 200, 3);
imshow("src_gray2", src_gray);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
waitKey(0);
findContours(src_gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
cout << "contour size: " << contours.size() << endl;
это изображение данных контуров ошибок
А также этот это правильные данные контуров.
Я воссоздал свой проект, но проблема все еще возникла.
Как я могу решить эту проблему?
Обновить:
Это также неправильно, когда я меняю путь «/» на «\» и создаю CV_RGB2GRAY вместо CV_BGR2GRAY.
Изображение серого и хитрый список вывода ниже.
Orginal: i.imgur.com/KXB6OAS.png
Серый: i.imgur.com/y1prHnj.png
Canny Output: i.imgur.com/UtUzRkh.png
Для сравнения: i.imgur.com/lLZ8OBj.jpg
Я использую библиотеку в своем проекте: FLTK, openGL (freeglut 、 glew), LinearSystemLib 2005, opencv211 с gpu из моего скомпилированного.
Пример кода openconv для findcontours собран из той же библиотеки opencv из моего проекта.
Задача ещё не решена.