Python opencv 2 와 opencv 3 의 cv2. find Contours 함수 사용

4056 단어 python영상 처리
다음 블 로그: Python opencv 사용 중인 Value Error: too many values to unpack (파 이 썬 opencv 사용 중인 Value Error: too many values to unpack)http://blog.csdn.net/caicai2526/article/details/79627370) cv2. find Contours 함수 가 opencv 2 와 opencv 3 에서 의 차이 점 과 응용 을 소개 합 니 다.
cv2. find Contours 함 수 는 이미지 윤곽 을 그 리 는 방법 으로 윤곽 을 검사 합 니 다.
Opencv 2 cv2. findContours 윤곽 검사
이 함 수 는 이미지 처리 에 자주 사용 되 며 처리 한 그림 이 2 값 그림 이라는 것 을 기억 합 니 다.
코드 구현
    import cv2  

    img = cv2.imread('       ')  
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
    ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #        ,         

    contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  
    cv2.drawContours(img,contours,-1,(0,0,255),3)  

    cv2.imshow("img", img)  
    cv2.waitKey(0)  

함수 원형
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])  

두 값 을 되 돌려 줍 니 다: contours: hierarchy.
매개 변수 소개 첫 번 째 매개 변 수 는 윤곽 을 찾 는 그림 입 니 다.
두 번 째 매개 변 수 는 윤곽 을 나타 내 는 검색 모델 로 네 가지 가 있다. (본 고 는 모두 새로운 cv2 인터페이스): cv2. RETREXTERNAL 은 외부 윤곽 cv2. RETR 만 검출LIST 검 측의 윤곽 은 등급 관 계 를 맺 지 않 습 니 다 cv2. RETRCCOMP 는 두 등급 의 윤곽 을 만 들 고 위의 한 층 은 외부 경계 이 며 안의 한 층 은 내부 구멍 의 경계 정보 입 니 다.만약 내 공 안에 또 하나의 연결 물체 가 있다 면, 이 물체 의 경계 도 꼭대기 층 에 있다.cv2.RETR_트 리 는 등급 트 리 구조의 윤곽 을 세운다.
세 번 째 매개 변수 method 는 윤곽 의 유사 방법 cv2. CHAINAPPROX_NONE 는 모든 윤곽 점 을 저장 합 니 다. 인접 한 두 점 의 픽 셀 위치 차 이 는 1 을 초과 하지 않 습 니 다. 즉, max (abs (x1 - x2), abs (y2 - y1) = 1 cv2. CHAINAPPROX_SIMPLE 압축 수평 방향, 수직 방향, 대각선 방향의 요 소 는 이 방향의 종점 좌표 만 유지 합 니 다. 예 를 들 어 사각형 윤곽 은 4 개의 점 으로 윤곽 정 보 를 저장 합 니 다 cv2. CHAINAPPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 는 teh - Chinl chain 유사 알고리즘 을 사용 합 니 다.
cv2. find Contours () 함 수 는 두 개의 값 을 되 돌려 줍 니 다. 하 나 는 윤곽 자체 이 고 다른 하 나 는 모든 윤곽 에 대응 하 는 속성 입 니 다.
Opencv 3 cv2. findContours 윤곽 검사
http://blog.csdn.net/jjddss/article/details/73527990 코드 구현
improve cv2  
improve numpy as np  
img=cv2.imread('test.jpg')  
imgray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
ret,thresh=cv2.thrshold(imgray,127,255,0)  
image,cnts,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  
cv2.imshow('imageshow',image)  # **     image,        thresh      **  
cv2.waitKey()  
print(np.size(cnts))  #   **           **  
print(cnts[0])   #                 ,      0, 0--(    -1),                
print(hierarchy) #**            **  
img=cv2.drawCountours(img,[cnts[0]],-1,(0,255,0),10)  #      0     
cv2.imshow('drawimg',img)  
cv2.waitKey() 

opencv 2 와 달리 출력 된 매개 변수 가 변화 하 는 것 은 주의해 야 합 니 다.또 하나의 함수: OpenCV 의 cv2. draw Contours 는 그림 에 윤곽 을 그립 니 다.

좋은 웹페이지 즐겨찾기