OpenCV findContour: нет подходящей функции

Я пытаюсь использовать строки Хафа в конкретном сценарии и не получаю ошибку функции соответствия для метода findContours

код

...
Mat bw, hsvdst;
...
bw = Mat::zeros(hsvdst.rows, hsvdst.cols, CV_8UC1);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(bw.clone(), contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

ошибка

error: no matching function for call to ‘findContours(cv::Mat, st
d::vector<std::vector<cv::Point_<int> > >&, std::vector<cv::Vec<int, 4> >&, cv::<anonymous enum>, cv::<anonymous enum>)

note: candidates are:
void cv::findContours(cv::InputOutputArray, cv::OutputArrayOfArr
ays, cv::OutputArray, int, int, cv::Point)
note:   no known conversion for argument 1 from ‘cv::Mat’ to ‘cv::Inpu
tOutputArray {aka const cv::_OutputArray&}’

Пожалуйста, помогите, я не уверен, что мне здесь не хватает.

Окружающая среда: OpenCV 2.4.6.1; Eclipse CDT, Ubuntu 12.04.2

1

Решение

Я получил, заменив

findContours(bw.clone(), contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

с

Mat m = bw.clone(); findContours(m, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

Это немного странно, учитывая, что определение Аргумент findContour имеет первый аргумент типа InputOutputArray, который сопоставляется с типом Map, а метод clone также возвращает тип Mat.

1

Другие решения

Я думаю, что проблема здесь в том, что Mat::clone() возвращает временное, и вы не можете получить ссылку на временное. Конструктор для _OutputArray занимает Mat&, Первое присвоение переменной будет работать (как показано в вашем ответе).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector