Почему метод OpenCV findContour всегда находит закрытый внешний контур?

88
7

У меня два изображения из одной камеры. Разница между ними заключается в том, что одна была взята с орфографической, а другая - с перспективной проекцией.


Вот два изображения:


Перспективные и орфографические изображения образцов


Когда я запускаю метод findContour OpenCV на них, результатом является следующее:


введите описание изображения здесь


Почему OpenCV не находит замкнутую внешнюю контурную кривую для перспективы?


Я пробовал как CV_RETR_TREE, так и CV_RETR_EXTERNAL флаги с комбинацией флагов CV_CHAIN_APPROX_SIMPLE и CV_CHAIN_APPROX_NONE.


Вот документация и пример кода (который я использую) для метода findContour.

спросил(а) 2021-01-25T17:38:33+03:00 4 месяца, 4 недели назад
1
Решение
89

На самом деле я не могу воспроизвести вашу проблему. Попробуйте с помощью этого кода:


#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;

int main()
{
RNG rng(1234);

Mat3b img = imread("path_to_image");

Mat1b gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
Mat1b bw = ~gray;

vector<vector<Point>> contours;
findContours(bw, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);

for (int i = 0; i < contours.size(); ++i)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(img, contours, i, color, 2);
}

imshow("Result", img);
waitKey();

return 0;
}

Результат:


введите описание изображения здесь

ответил(а) 2021-01-25T17:38:33+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема