9

이미지의 윤곽을 추출하고 싶습니다. 포인트 좌표의 시퀀스로 표현됩니다.Canny 가장자리에서 단일 선 컨투어 추출

Canny 나는 이미지의 가장자리 만 포함하는 이진 이미지를 생성 할 수 있습니다. 그런 다음 윤곽을 추출하려면 findContours을 사용하려고합니다. 그러나 결과는 좋지 않습니다.

각 가장자리마다 매우 얇은 영역으로 간주되는 것처럼 2 줄이 자주 나옵니다. 윤곽을 단순화하여 단일 선으로 그릴 수 있습니다. 또는 올바른 결과를 직접 생성하는 다른 기능으로 추출하는 것이 더 낫습니다.

OpenCV의 설명서를 살펴 봤지만 유용한 것을 찾을 수 없었지만 비슷한 문제가있는 첫 번째 것이 아닐 것입니다. 사용할 수있는 기능이나 메소드가 있습니까? 스케일 인수가 윤곽의 이중 라인을 강조하는 데 사용됩니다

def main(): 
    img = cv2.imread("lena-mono.png", 0) 

    if img is None: 
     raise Exception("Error while loading the image") 

    canny_img = cv2.Canny(img, 80, 150) 

    contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) 

    scale = 10 
    contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale) 

    for cnt in contours: 
     color = np.random.randint(0, 255, (3)).tolist() 
     cv2.drawContours(contours_img,[cnt*scale], 0, color, 1) 

    cv2.imwrite("canny.png", canny_img) 
    cv2.imwrite("contours.png", contours_img) 

: 여기

는 지금까지 작성한 파이썬 코드입니다. 다음은 이미지에 대한 링크입니다 :
  • Edges

    • Lena 그레이 스케일로 추출 Canny
    • Contours : 당신이 잘못된 결과 findContours

    모든 생산 볼 수있는 10 배 줌 제안은 크게 감사하겠습니다.

  • +1

    사용한다 HoughLines http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghlines – Khashayar

    +0

    노이즈를 줄이기 위해 이미지를 흐리게 처리합니다. – baci

    +0

    나는 th의 노이즈 문제라고 생각하지 않습니다. 전자 이미지. Canny로 추출한 가장자리를 보면 괜찮습니다. HoughLines를 사용하면 이미지의 곡선을 처리 할 수 ​​없을 것입니다. 그렇습니까? – Muffo

    답변

    6

    제가 이해할 경우 파라 메트릭 (Hough 변형) 의미의 줄을 찾는 것과 관련이 없습니다.

    대신 한 줄에 여러 윤곽을 반환하는 findContours 메서드의 문제입니다. 이 선의 두 측에 발생하는 화상의 휘도 경사를 조율 필터 수단 - 캐니 에지가 검출기 때문에

    이다. 아마? "내가 한 줄에 낮은 수준의 첨단 기능을 변환 할 수있는 방법", 또는 :

    그래서 귀하의 질문에 더 가깝다 "? 어떻게 내가 하나의 라인을 감지하는 윤곽 계층 구조를 탐색 할 수 있습니다"

    이를 - 매우 일반적인 주제는 여기하는 하나 개의 솔루션을 제안 이전 게시물 :

    OpenCV converting Canny edges to contours