2012-08-07 7 views
0

내 그림에서 물체의 윤곽을 잡는 데 문제가 있습니다.OpenCV : 흑백의 윤곽선을 얻는 방법?

모든 잡음을 삭제하기 위해 adjustROI()Canny()을 사용합니다.

는 또한 erode()dillate(), Laplacian(), GaussianBlur(), Sobel()을 시도 ... 그리고 난 사진을 선명하게하기 위해이 코드를 발견

GaussianBlur(src, dst_gaussian, Size(0, 0), 3); 

addWeighted(src, 1.5, dst_gaussian, -0.5, 0, dst); 

을하지만 내 결과는 항상 동일합니다 : 내 목적은 가득 findContours()으로 윤곽선을 얻을 수 없으므로 (TV 화면의 노이즈와 같이) 흑백으로 표시됩니다 (findContours()은 전체 개체 중 하나가 아닌 백만 개의 윤곽선을 찾습니다.) drawContours()으로 확인합니다.

저는 C++을 사용하고 사진을 회색조 매트로로드합니다 (Canny의 경우 그레이 스케일이어야 함). 내 개체는 모든 그림에 서로 다른 모양을 가지고 있지만 항상 그림의 중간 정도입니다.

이미지 처리를 통해 더 나은 색상의 객체를 얻는 방법을 찾아야하지만, 그 밖의 다른 방법을 알지 못합니다. 또는 이미지 처리 후 색상으로 객체를 채우는 방법 (윤곽선이없는 왜냐하면 이것은 내가 결국 원하는 것이기 때문입니다.)

모든 아이디어를 환영합니다. 미리 감사드립니다.

+0

예제를 제공하지 않으면 대답하기가 어려울 것입니다. 나는 당신의 이전 포스트에서 당신이 그 (것)들을 소유하지 않기 때문에 당신이 그림을 둘 수 없다는 것을 이해했다. 제발, 비슷한 이미지를 생성 할 수 있습니까? –

답변

0

대부분의 경우 작동하는 해결책을 발견했습니다. 확률적인 Hough 변환 HoughLinesP()을 사용하여 객체를 채 웁니다.

vector<Vec4i> lines; 
HoughLinesP(dst, lines, 1, CV_PI/180, 80, 30, 10); 
for(size_t i = 0; i < lines.size(); i++) 
{ 
    line(color_dst, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8); 
} 

이것은 OpenCV 설명서에서 제공하는 일부 샘플 코드입니다.

일부 가장자리 감지 알고리즘 (예 :)을 사용한 후 확률적인 Hough 변환은 이진 영상의 객체를 찾습니다. 알고리즘은 그려진 경우 전체 객체를 나타내는 선을 찾습니다. 물론 매개 변수 중 일부는 어떤 종류의 그림에 맞게 조정되어야합니다.

이것이 모든 그림이나 모든 개체에서 작동하는지는 확실하지 않지만 제 경우에는 그렇지 않습니다.

관련 문제