OpenCV-Python 윤곽 구현 특징 값
윤곽 자체 의 일부 속성 특징 과 윤곽 이 둘러싸 인 대상 의 특징 은 이미 지 를 묘사 하 는 데 중요 한 의 미 를 가진다.이 박문 은 윤곽 자체 의 속성 특징 과 윤곽 포위 대상 의 특징 을 소개 할 것 이다.
너비
윤곽 에서 우 리 는 너비 와 높이 비 교 를 통 해 윤곽 을 묘사 할 수 있다.예 를 들 어 사각형 의 윤곽 너비 와 높이 는 다음 과 같다.
너비
다음은 사각형 윤곽 의 너비 와 높이 를 계산 합 니 다.코드 는 다음 과 같 습 니 다.
import cv2
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
x, y, w, h = cv2.boundingRect(contours[0])
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)
cv2.imshow("img1", img)
aspectRatio=float(w)/h
print(aspectRatio)
cv2.waitKey()
cv2.destroyAllWindows()
운행 후에 우 리 는 윤곽 의 너비 와 높이 를 약 3 으로 얻 을 수 있다.Extend
우 리 는 또한 윤곽 면적 과 사각형 경계 면적 의 비례 Extend 를 사용 하여 이미지 와 그 윤곽 특징 을 묘사 할 수 있다.수학 계산 공식 도 에서:
확장=윤곽 면적/직사각형 경계 면적
다음은 Extend 를 계산 하 겠 습 니 다.코드 는 다음 과 같 습 니 다.
import cv2
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
x, y, w, h = cv2.boundingRect(contours[0])
rectArea=w*h#
cntArea=cv2.contourArea(contours[0])#
extend=float(cntArea)/rectArea
print(extend)
이 예 에서 윤곽 면적 과 사각형 경계 면적 의 비례 는 약 0.8 이다.Solidity
우 리 는 또한 윤곽 면적 과 돌출 면적 의 비례 Solity 를 사용 하여 이미지,윤곽 과 돌출 된 특징 을 평가 할 수 있다.그 수학 계산 공식 은 다음 과 같다.
Slidity=윤곽 면적/돌출 면적
다음은 Slidity 를 계산 하 겠 습 니 다.코드 는 다음 과 같 습 니 다.
import cv2
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
x, y, w, h = cv2.boundingRect(contours[0])
cntArea=cv2.contourArea(contours[0])#
hull=cv2.convexHull(contours[0])
hullArea=cv2.contourArea(hull)#
solidity=float(cntArea)/hullArea
print(solidity)
운행 후,본 사례 의 윤곽 면적 과 돌출 면적 의 비례 는 solidity 가 약 1:등가 직경
OpenCV 에서 우 리 는 윤곽 면적 과 같은 원형의 지름 인 등 효 직경 을 사용 하여 윤곽 의 특징 값 을 평가 할 수 있다.그 수학 계산 공식 은 다음 과 같다.
다음은 윤곽 면적 과 같은 원형 지름 을 계산 하 겠 습 니 다.코드 는 다음 과 같 습 니 다.
import cv2
import numpy as np
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
x, y, w, h = cv2.boundingRect(contours[0])
cntArea=cv2.contourArea(contours[0])#
equiDiameter=np.sqrt(4*cntArea/np.pi)
print(equiDiameter)
cv2.circle(img,(100,100),int(equiDiameter/2),(0,255,0),3)
cv2.imshow("img1",img)
cv2.waitKey()
cv2.destroyAllWindows()
운행 한 후에 우 리 는 그 같은 효 과 를 얻 은 지름 이 약 145 이다.방향.
OpenCV 에서 함수 cv2.fitEllipe()는 가장 적합 한 타원 을 구축 할 수 있 고 반환 값 에서 타원 의 중심 점,축 길이,회전 각도 정 보 를 각각 되 돌려 줄 수 있다.이런 형식 을 사용 하면 타원 의 방향 등 정 보 를 직관 적 으로 얻 을 수 있다.
함수 cv2.fitEllipe()반환 값 은:
(x,y):타원 의 중심 점
(MA,ma):타원 수평 방향 축 과 수직 방향 축의 길이
angle:타원 회전 각도
import cv2
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
ellipsis=cv2.fitEllipse(contours[0])
(x, y), (MA, ma), angle = cv2.fitEllipse(contours[0])
print((x, y), (MA, ma), angle)
cv2.ellipse(img, ellipsis, (0, 255, 0), 2)
cv2.imshow("img1", img)
cv2.waitKey()
cv2.destroyAllWindows()
원래 타원 도 이 고 아래 를 맞 추 면 타원 이다.마스크 와 픽 셀 점
때때로 우 리 는 어떤 대상 의 마스크 이미지 와 그 에 대응 하 는 점 을 얻 는 것 과 같다.OpenCV 에서 cv2.find NonZero()함 수 를 제공 하여 그림 의 윤곽 점 위 치 를 가 져 옵 니 다.전체 정 의 는 다음 과 같 습 니 다.
def findNonZero(src, idx=None):
src:0 요소 가 아 닌 그림 을 찾 으 려 면idx:0 요소 가 아 닌 색인 위 치 를 되 돌려 줍 니 다.구체 적 인 형식 은(줄 번호,열 번호)
아래,우 리 는 이 함 수 를 실측 합 니 다.코드 는 다음 과 같 습 니 다.
import cv2
import numpy as np
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask=np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask,[contours[0]],0,255,2)
pixelpoints=cv2.findNonZero(mask)
print(pixelpoints)
cv2.imshow("img1", mask)
cv2.waitKey()
cv2.destroyAllWindows()
실행 한 후에 우 리 는 윤곽 점 의 위 치 를 얻 을 수 있 습 니 다.최대 치,최소 치 및 위치
OpenCV 에서 cv2.minMaxLoc()함 수 를 제공 하여 지정 한 대상 의 최대 값,최소 값 과 위치 등 정 보 를 가 져 옵 니 다.전체 정 의 는 다음 과 같 습 니 다.
def minMaxLoc(src, mask=None):
src:단일 채널 이미지마스크:마스크,마스크 를 사용 하여 그림 을 만 져 서 마스크 가 지정 한 영역 에서 가장 값 진 정 보 를 얻 을 수 있 습 니 다.
이 함 수 는 4 개의 값 을 되 돌려 줍 니 다:최소 값,최대 값,최소 값 위치,최대 값 위치.
다음은 이 값 을 가 져 오 겠 습 니 다.코드 는 다음 과 같 습 니 다.
import cv2
import numpy as np
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros(gray.shape, np.uint8)
cv2.drawContours(mask, [contours[0]], 0, 255, 2)
min, max, min_loc, max_loc = cv2.minMaxLoc(gray, mask)
print(min, max, min_loc, max_loc)
실행 후 콘 솔 출력 4 개 값:평균 색상 및 평균 그 레이스 케 일
OpenCV 에서,이것 은 우리 에 게 cv2.mean()함 수 를 제공 하여 대상 의 평균 색깔 과 평균 그 레이스 케 일 을 계산한다.그 전체 정 의 는 다음 과 같다.
def mean(src, mask=None):
매개 변 수 는 위의 두 마디 와 마찬가지 로 여기 서 군말 하지 않 는 다.다음은 이 함 수 를 사용 하 겠 습 니 다.코드 는 다음 과 같 습 니 다.
import cv2
import numpy as np
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask=np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask,[contours[0]],0,255,2)
mean=cv2.mean(img,mask)
실행 후 출력 4 개 값:RGB 및 A 채널 의 평균 값:극점
때때로 우 리 는 어떤 대상 안의 극점 을 얻 고 싶다.예 를 들 어 가장 왼쪽,가장 오른쪽,가장 위,가장 하등 이다.OpenCV 에서 다음 과 같은 방법 을 제공 합 니 다.
left=tuple(cnt[cnt[:,:,0].argmin()][0])
right=tuple(cnt[cnt[:,:,0].argmax()][0])
top=tuple(cnt[cnt[:,:,1].argmin()][0])
bottom=tuple(cnt[cnt[:,:,1].argmax()][0])
다음,우 리 는 이러한 방법 을 통 해 얻 을 수 있 습 니 다.코드 는 다음 과 같 습 니 다.
import cv2
import numpy as np
img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)
#
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros(img.shape, np.uint8)
cnt = contours[0]
left = tuple(cnt[cnt[:, :, 0].argmin()][0])
right = tuple(cnt[cnt[:, :, 0].argmax()][0])
top = tuple(cnt[cnt[:, :, 1].argmin()][0])
bottom = tuple(cnt[cnt[:, :, 1].argmax()][0])
print(left, right, top, bottom)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, "left", left, font, 1, (0, 255, 0), 2)
cv2.putText(img, "right", right, font, 1, (0, 255, 0), 2)
cv2.putText(img, "top", top, font, 1, (0, 255, 0), 2)
cv2.putText(img, "bottom", bottom, font, 1, (0, 255, 0), 2)
cv2.imshow("result",img)
cv2.waitKey()
cv2.destroyAllWindows()
실행 후,값 과 효 과 는 다음 과 같 습 니 다:여기 서 OpenCV-Python 의 윤곽 을 실현 하 는 특징 값 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 OpenCV 윤곽 에 관 한 특징 값 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 OpenCV 템플릿 프로젝트 만들기・Windows 7 Professional 64bit ・Visual Studio 2017 Version 15.9.14 · OpenCV 3.4.1 OpenCV의 도입 방법 등은 아래를 참조하십시오. Visual Stu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.