2013-08-17 1 views
1

나는 특정 시나리오에서 하프 라인을 사용하고 findContours 방법OpenCV의 findContour : 일치하는 기능

코드

... 
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; 이클립스 CDT, 우분투 12.04.2

+0

컴파일러는 정확한 문제가 무엇인지 알려주는데 아주 적절합니다. 'note : 'cv :: Mat'에서 'cv :: Mat'까지 'cv :: Matp'에서 'cv :: Inpu'로의 변환에 대해서는 알려진 바가 없습니다. tuchutputArray {aka const cv :: _ OutputArray &} ' – Mahesh

+0

내 생각에 OutputArray는 매트 유형으로 매핑되었습니다. 나는 명시적인 변환이 필요하다. – Damilola

답변

1

나는 findContour의 definition 유형이 될 수있는 첫 번째 인자를 가지고 있음을 감안할 때, 그것은 비록 조금 이상해

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

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

를 대체하여 침입 Map 유형에 매핑되는 InputOutputArray 및 clone 메소드는 또한 Mat 유형을 반환합니다.

0

여기서 문제는 Mat::clone()이 일시적으로 반환되며 임시 참조를 얻을 수 없다고 생각합니다. _OutputArray의 생성자는 Mat&입니다. 변수에 먼저 지정하면 (답안에 표시 할 때) 작동합니다.