OpenCV findContour:没有匹配功能

时间:2013-08-17 13:35:40

标签: c++ opencv contour

我正在尝试在特定场景中使用Hough线并且不会为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

2 个答案:

答案 0 :(得分: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的definition的第一个参数是InputOutputArray类型,它映射到Map类型,而clone方法也返回Mat类型。

答案 1 :(得分:0)

我认为这里的问题是Mat::clone()返回一个临时的,你无法获得对临时的引用。 _OutputArray的构造函数需要Mat&。首先将它分配给变量将起作用(正如您在答案中所示)。