Python Opencv cv2.Canny()테두리 검출 실현

이 블 로 그 는 Canny 테두리 검출 의 개념 을 소개 하고 cv2.Canny()를 이용 하여 테두리 검출 을 실현 한다.
  • Canny 테두리 검출 은 유행 하 는 테두리 검출 알고리즘 이다.그것 은 존 F 가 개발 한 다단 계 알고리즘 이다.
  • Canny 테두리 검출 은 크게 4 단계 가 포함 되 어 있 습 니 다.
  • 소음 감소(고 스 필터 로 고주파 소음 제거);
  • 가장자리 경사도 와 방향 을 계산 합 니 다(SobelX,SobleY 핵 은 수평 방향 과 수직 방향 에서 부 드 러 운 그림 을 필터 링 하여 각 픽 셀 의 가장자리 경사도 와 방향 을 찾 습 니 다).
  • 비 최대 억제(경사도 크기 와 방향 을 얻 은 후에 그림 을 모두 스 캔 하여 필요 하지 않 은 픽 셀 을 제거 합 니 다.이 픽 셀 들 은 가장자리 가 되 지 않 을 수 있 습 니 다.픽 셀 이 경사도 방향의 인접 도 메 인 에서 부분 최대 치 인지 확인 합 니 다.그렇지 않 으 면 억제 된다.한 마디 로 하면 얻 은 결 과 는'가 는 변'을 가 진 2 치 이미지 이다.
  • 지연 한도 값(어느 쪽 이 진정한 변 이 고 어떤 것 이 아 닌 지 결정 합 니 다.이 를 위해 두 개의 한도 값 minVal 과 maxVal 이 필요 합 니 다.모든 강도 경도 가 maxVal 보다 큰 변 은 반드시 변 이 고 minVal 보다 작은 변 은 반드시 변 이 므 로 버 립 니 다.이 두 한도 값 사이 에 있 는 변 은 그 연관 성에 따라 변 또는 비 변 으로 분류 된다.'가장자리 확인'픽 셀 에 연결 되면 가장자리 의 일부분 으로 여 겨 집 니 다.그렇지 않 으 면 그것들 도 버 려 질 것 이다.)
  • 지연 한도 값 minVal 과 maxVal 을 선택 하 는 것 이 정확 한 결 과 를 얻 는 관건 이다.
    1.효과 도
    원본 그림 VS Canny 검 측 효과 그림 은 다음 과 같 습 니 다.
    在这里插入图片描述
    2.소스 코드
    
    # Canny                。     F   ,         ;
    # Canny        4   :
    # 
    # 1.  (            );
    # 2.          (SobelX、SobleY                      ,              );
    # 3.      (           ,        ,          ,           。                      。  ,    (  )。    ,          “  ”     。
    # 4.     (          ,    。        minVal maxVal,        maxVal       ,  minVal       ,    。                         。       “    ”  ,            。  ,       。)
    # 
    #       minVal maxVal          。
    import cv2
    from matplotlib import pyplot as plt
    
    img = cv2.imread('zly.jpg', 0)
    edges = cv2.Canny(img, 80, 200)
    
    plt.subplot(121), plt.imshow(img, cmap='gray')
    plt.title('Original Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(edges, cmap='gray')
    plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
    
    plt.show()
    
    참조
    추가:OpenCV-Python 에서 Canny()인자
    단계:
  • 컬러 이미 지 를 그 레이스 케 일 이미지 로 변환(그 레이스 케 일 또는 단일 채널 그림 으로 읽 기)
  • 이미지 에 고 스 퍼 지(소음 제거)
  • 이미지 경사도 를 계산 하고 경사도 에 따라 이미지 가장자리 진폭 과 각도
  • 을 계산 합 니 다.
  • 경사도 방향 에 따라 비 극 대 치 억제(가장자리 세분 화)
  • 이중 한도 값 가장자리 연결 처리
  • 이치 화 이미지 출력 결과
  • 
    """
    cv2.Canny(image,            #     (       )
              threshold1, 
              threshold2,       #      2            
              [, edges[, 
              apertureSize[,    # apertureSize:Sobel     
              L2gradient ]]])   #   (   ):
                                  true:       L2      (               ),
                                  false:  L1  (               )。
    """
    
    import cv2
    import numpy as np  
     
    original_img = cv2.imread("qingwen.png", 0)
    
    # canny():     
    img1 = cv2.GaussianBlur(original_img,(3,3),0)
    canny = cv2.Canny(img1, 50, 150)
    
    #    :    
    _,Thr_img = cv2.threshold(original_img,210,255,cv2.THRESH_BINARY)#        210(          )
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))         #        
    gradient = cv2.morphologyEx(Thr_img, cv2.MORPH_GRADIENT, kernel) #  
    
    cv2.imshow("original_img", original_img) 
    cv2.imshow("gradient", gradient) 
    cv2.imshow('Canny', canny)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
     
    한도 값 크기 조정 프로그램
    
    import cv2
    import numpy as np
     
    def CannyThreshold(lowThreshold):
        detected_edges = cv2.GaussianBlur(gray,(3,3),0)
        detected_edges = cv2.Canny(detected_edges,
                                   lowThreshold,
                                   lowThreshold*ratio,
                                   apertureSize = kernel_size)
        dst = cv2.bitwise_and(img,img,mask = detected_edges)  # just add some colours to edges from original image.
        cv2.imshow('canny demo',dst)
    
    lowThreshold = 0
    max_lowThreshold = 100
    ratio = 3
    kernel_size = 3
     
    img = cv2.imread('qingwen.png')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
     
    cv2.namedWindow('canny demo')
     
    cv2.createTrackbar('Min threshold','canny demo',lowThreshold, max_lowThreshold, CannyThreshold)
     
    CannyThreshold(0)  # initialization
    if cv2.waitKey(0) == 27:
        cv2.destroyAllWindows()
     
    Python 이 Opencv cv2.Canny()변두리 검 측 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Opencv cv2.Canny()변두리 검 측 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기