2013-11-10 3 views
0

내가 뭘하는지 이미지의 사전 처리 후 (thresholding에 의해) 이미지의 윤곽을 찾습니다. 내가 내 코드는 다음 (DFT() 함수를 사용) 각 윤곽선의 이산 푸리에 기술자를 얻으려면,cv :: findcontours 및 DFT 사용 방법? 그것은 디버그 오류가 발생합니다

vector<Mat> contourLines1; 
vector<Mat> contourLines2; 

getContourLine(exC1, contourLines1, binThreshold, numOfErosions); 
getContourLine(exC2, contourLines2, binThreshold, numOfErosions); 

// calculate fourier descriptor 
Mat fd1 = makeFD(contourLines1.front()); 
Mat fd2 = makeFD(contourLines2.front()); 

///////////////////////// 

void getContourLine(Mat& img, vector<Mat>& objList, int thresh, int k){ 
    threshold(img,img,thresh,255,THRESH_BINARY); 
    erode(img,img,0,cv::Point(-1,-1),k); 
    cv::findContours(img,objList,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE); 
} 

///////////////////////// 

Mat makeFD(Mat& contour){ 
    Mat result; 
    dft(contour,result,DFT_ROWS); 
    return result; 
} 

문제는 무엇입니까 ??? 나는 그것을 찾을 수 없습니다 .. 함수의 매개 변수 유형 (예 : cv :: finContours 또는 dft)이 잘못되었다고 생각합니다 ....

답변

1

findContours의 출력은 < 벡터 < 포인트>입니다. 벡터 < 매트>를 제공하고 있습니다. 이것은 합법적 인 사용이지만 약간은 모호하지만 행렬의 유형 요소는 'int'라는 것을 기억해야합니다. 반면에 DFT는 수레의 행렬에서만 작동합니다. 이것은 충돌의 원인입니다. convertTo 함수를 사용하여 적절한 유형의 행렬을 만들 수 있습니다.

또한 출력이 어떤 계산을 수행하든간에 어떤 의미가 있는지 확신하지 못합니다. 필자가 알고있는 한 푸리에 변환은 신호에서 추출 된 좌표가 아닌 신호와 함께 작동하도록되어있다. 그냥 문체 발언

: 같은 임계 값을 수행 할 수있는 청소기 방법은

img = (img > thresh); 
입니다