Python 은 Opencv 를 사용 하여 가장자리 검 측 및 윤곽 검 측 실현
Canny 테두리 검출 기 는 광범 위 하 게 사용 되 는 알고리즘 으로 테두리 검출 의 가장 좋 은 알고리즘 으로 여 겨 진다.이 방법 은 고 스 차분 알고리즘 보다 더 복잡 한 기 교 를 사용 했다.예 를 들 어 다방 향 그 레이스 케 일 사다리 와 정체 한도 값 화 등 이다.
Canny 테두리 검출 기 알고리즘 기본 절차:
4.567917.부 드 러 운 이미지:적당 한 퍼 지 반지름 을 사용 하여 고 스 퍼 지 를 실행 하여 이미지 안의 소음 을 감소 합 니 다4.567917.이미지 의 경사도 를 계산 합 니 다.여기 서 이미지 의 경사도 를 계산 하고 경사도 를 수직,수평 과 경사 대각 으로 분류 합 니 다.이 단계 의 출력 은 다음 단계 에서 진정한 가장 자 리 를 계산 하 는 데 사 용 됩 니 다4.567917.비 최대 치 억제:지난 단계 에 계 산 된 경사도 방향 을 이용 하여 특정한 픽 셀 이 경사도 의 정방 향 과 마이너스 방향 에서 국부 최대 치 인지,만약 그렇다면 이 픽 셀(픽 셀 은 가장자리 에 속 하지 않 음)을 억제 합 니 다.이것 은 가장자리 세분 화 기술 로 가장 급격 한 변환 으로 가장자리 점 을 선택한다4.567917.지연 한도 값 으로 가장 자 리 를 선택 합 니 다.마지막 단 계 는 특정한 가장자리 가 최종 출력 으로 충분 한 지 확인 하고 마지막 으로 모든 뚜렷 하지 않 은 가장 자 리 를 제거 합 니 다Opencv 사용 Canny 테두리 검출 은 상대 적 으로 간단 합 니 다.코드 는 다음 과 같 습 니 다.
import cv2
import numpy as np
img = cv2.imread("hammer.jpg", 0)
cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300))
cv2.imshow("canny", cv2.imread("canny.jpg"))
cv2.waitKey()
cv2.destroyAllWindows()
실행 결과:Canny 함수 의 원형 은?
cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])
필요 한 인자:첫 번 째 매개 변 수 는 처리 해 야 할 원본 그림 입 니 다.이 그림 은 단일 채널 의 그 레이스 케 일 그림 이 어야 합 니 다.
두 번 째 매개 변 수 는 지연 한도 값 1 이다.
세 번 째 매개 변 수 는 지연 한도 값 2 이다.
윤곽 검사
윤곽 검 사 는 주로 cv2.find Contours 함수 로 이 루어 집 니 다.
함수
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])
함수 매개 변수첫 번 째 매개 변 수 는 윤곽 을 찾 는 그림 입 니 다.
두 번 째 매개 변 수 는 윤곽 을 나타 내 는 검색 모델 로 네 가지 가 있다.
이미지,contours,hier=cv2.findContours(thresh,cv2.RETREXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
이미지
contours:그림 의 윤곽 은 목록 의 형식 으로 모든 요 소 는 그림 의 윤곽 입 니 다.
hier:해당 윤곽 간 의 관계.이것 은 ndarray 입 니 다.그 중의 요소 개 수 는 윤곽 갯 수 와 같 습 니 다.각 윤곽 contours[i]는 4 개의 hierarchy 요소 hierarchy[i][0]~hierarchy[i][3]에 대응 하여 각각 뒤의 윤곽,앞의 윤곽,부모 윤곽,내장 윤곽 의 색인 번 호 를 표시 합 니 다.해당 항목 이 없 으 면 이 값 은 마이너스 입 니 다.
원본 그림:
예시 1
import cv2
import numpy as np
img = cv2.pyrDown(cv2.imread("hammer.jpg", cv2.IMREAD_UNCHANGED))
# threshold , , img.copy() ,cv2.THRESH_BINARY
ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY)
# findContours
# thresh
# , cv2.RETR_EXTERNAL ,cv2.RETR_TREE
#
# ,image 、contours 、hier
image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
#
# boundingRect ,x,y ,w,h
x, y, w, h = cv2.boundingRect(c)
# img ,(x, y), (x + w, y + h) ,(0, 255, 0) ,2
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
#
#
rect = cv2.minAreaRect(c)
#
box = cv2.boxPoints(rect)
#
box = np.int0(box)
#
cv2.drawContours(img, [box], 0, (0, 0, 255), 3)
#
#
(x, y), radius = cv2.minEnclosingCircle(c)
#
center = (int(x), int(y))
radius = int(radius)
#
img = cv2.circle(img, center, radius, (0, 255, 0), 2)
# #
#
cv2.drawContours(img, contours, -1, (255, 0, 0), 2)
#
cv2.imshow("contours", img)
cv2.waitKey()
cv2.destroyAllWindows()
실행 결 과 는 그림 과 같 습 니 다.예시 2
import cv2
import numpy as np
img = cv2.pyrDown(cv2.imread("hammer.jpg", cv2.IMREAD_UNCHANGED))
ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY) , 127, 255, cv2.THRESH_BINARY)
# findContours
# thresh
# , cv2.RETR_EXTERNAL ,cv2.RETR_TREE
#
# ,image 、contours 、hier
image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# black
black = cv2.cvtColor(np.zeros((img.shape[1], img.shape[0]), dtype=np.uint8), cv2.COLOR_GRAY2BGR)
for cnt in contours:
# 。 cv2.arcLength() 。 (True) , ( )
epsilon = 0.01 * cv2.arcLength(cnt, True)
# approxPolyDP ,cnt ,epsilon , , 。
# true, , , , false, 。
approx = cv2.approxPolyDP(cnt, epsilon, True)
# convexHull , cnt 。
hull = cv2.convexHull(cnt)
#
cv2.drawContours(black, [cnt], -1, (0, 255, 0), 2)
#
cv2.drawContours(black, [approx], -1, (255, 255, 0), 2)
#
cv2.drawContours(black, [hull], -1, (0, 0, 255), 2)
#
cv2.imshow("hull", black)
cv2.waitKey()
cv2.destroyAllWindows()
실행 결 과 는 그림 과 같 습 니 다.참고 자료:OpenCV 3 컴퓨터 시각 파 이 썬 언어 구현 2 판
파 이 썬 이 Opencv 를 사용 하여 테두리 검 측 과 윤곽 검 측 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 테두리 검 측 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.