OpenCV-Python 통용 형태학 함수 실현

유 니 버 설 형태학 함수
상편 박문 에서 우 리 는 형태학 의 기초 부식 과 팽창 조작 을 소 개 했 고 부식 과 팽창 을 결합 시 켜 조합 하면 우 리 는 연산,폐 연산 등 복잡 한 형태학 연산 을 실현 할 수 있다.
OpenCV 에서 우리 에 게 제공 하 는 통용 형태학 함 수 는 cv2.morphologyEx()이 고 그 완전한 정 의 는 다음 과 같다.

def morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None): 
이러한 매개 변 수 는 기본적으로 앞에서 소개 한 적 이 있 지만,한 가지 설명 이 필요 합 니 다.src 원시 이미 지 는 반드시 CV 여야 합 니 다.8U,CV_16U,CV_16S,CV_32F,CV_64F 중 에 하나 야.
물론 이 안에 또 하나의 낯 선 매개 변 수 는 op 이다.이것 은 바로 각종 형태학 의 유형 이 고 구체 적 인 유형 은 표 와 같다.
유형
설명 하 다.
의의
조작 하 다.
cv2.MORPH_ERODE
부식
부식
erode()
cv2.MORPH_DILATE
팽창 하 다.
팽창 하 다.
dilate()
cv2.MORPH_OPEN
연산 을 시작 하 다
선 부식 후 팽창
dilate(erode())
cv2.MORPH_CLOSE
폐 연산
선팽창 후 부식
erode(dilate())
cv2.MORPH_GRADIENT
형태학 경사도 연산
팽창 도 부식 도
dilate()-erode()
cv2.MORPH_TOPHAT
캡 연산
원본 이미지 감 개 연산 소득 이미지
src-open()
cv2.MORPH_BLACKHAT
블랙 캡 연산
폐 연산 소득 이미지 원본 이미지 감소
close()-src
cv2.MORPH_HITMISS
적중
전경 배경 부식 연산 의 교 집합.CV8UC 1 바 이 너 리 이미지 만 지원 합 니 다.
intersection(erode(src),erode(src1))
연산 을 시작 하 다
위의 표 에서 보 듯 이 연산 은 원래 의 이미 지 를 부식 시 킨 다음 에 팽창 작업 을 하 는 것 이다.주로 소음 제거,계수 등에 쓰 인 다.소음 제거 우 리 는 이미 위의 부식 조작 을 통 해 완성 할 수 있 으 며,아래 에서 우 리 는 재 미 있 는 계산 조작 을 실현 할 수 있다.

import cv2
import numpy as np

img = cv2.imread("open.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((9,9), np.float32)
result = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel,iterations=5)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
실행 한 후에 우 리 는 서로 다른 구역 을 구분 할 수 있 습 니 다.효 과 는 다음 과 같 습 니 다.
开运算
폐 연산
폐 연산 은 먼저 팽창 한 후에 부식 되 는 연산 으로 전경 물체 내부 의 작은 구멍 을 닫 거나 물체 의 작은 검 은 점 을 제거 하 는 데 도움 이 되 며 서로 다른 전경 이미 지 를 연결 할 수 있다.아래 에서 우 리 는 위의 그림 을 연결 할 것 이다.

import cv2
import numpy as np

img = cv2.imread("close.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((10, 10), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=7)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
실행 한 후에 두 개의 사각형 이 하나의 전체 로 연결 되 었 습 니 다.효 과 는 다음 과 같 습 니 다.
闭运算
형태학 경사도 연산
형태학 경사도 연산 은 이미지 팽창 후의 이미지 로 이미 지 를 부식 시 키 는 연산 을 빼 고 이 조작 은 원시 이미지 의 전경 이미지 의 가장 자 리 를 얻 을 수 있다.우 리 는 위의 팽창 한 그림 으로 테스트 합 니 다.코드 는 다음 과 같 습 니 다.

import cv2
import numpy as np

img = cv2.imread("8.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((5, 5), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel,iterations=2)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
실행 후,우리 의 그림 이 비어 있 습 니 다.효 과 는 다음 과 같 습 니 다.
形态学梯度运算
캡 연산
캡 연산 은 원본 그림 에서 연산 그림 을 빼 는 작업 입 니 다.그것 은 이미지 의 소음 정 보 를 얻 거나 원래 이미지 의 가장자리 보다 더 밝 은 가장자리 정 보 를 얻 을 수 있다.즉,위의 그림 에서 흰색 라인 을 가 져 오 는 것 입 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.

import cv2
import numpy as np

img = cv2.imread("8.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((5, 5), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel,iterations=2)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
실행 후 효 과 는 다음 과 같 습 니 다.
顶帽运算
블랙 캡 연산
검 은 모자 연산 은 폐 연산 이미지 로 원본 이미 지 를 빼 는 작업 이다.그것 은 내부 의 작은 구멍 이나 전경 색 의 작은 검 은 점 을 얻 거나 원시 이미지 의 가장자리 보다 더 어두 운 가장자리 부분 을 얻 을 수 있다.여기,우 리 는 앞의 인물 이미 지 를 사용 합 니 다.코드 는 다음 과 같 습 니 다.

import cv2
import numpy as np

img = cv2.imread("4.jpg", cv2.IMREAD_UNCHANGED)
kernel = np.ones((5, 5), np.float32)
result = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel,iterations=2)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
실행 후 효 과 는 다음 과 같 습 니 다.
黑帽运算
구조 원 함수
앞에서 소개 한 바 와 같이 구조 원 은 사용자 정의 할 수도 있 고 cv2.getStructuringElement()함 수 를 통 해 생 성 할 수도 있다.여기 서 우 리 는 그 완전한 정 의 를 살 펴 보 자.

def getStructuringElement(shape, ksize, anchor=None): 
shape:모양 형식,값 은 다음 표 와 같 습 니 다.
유형
의의
cv2.MORPH_RECT
직사각형 구조 원,모든 원소 값 1
cv2.MORPH_CROSS
십자 형 구조 원,대각선 원소 값 1
cv2.MORPH_ELLIPSE
타원형 구조 원소
ksize:구조 원 크기
anchor:구조 원 의 닻 위치,기본 값(-1,1)은 모양 의 중심 입 니 다.십자 성형 의 형상 만 이 닻 점 위치 와 밀접 하 게 연결 되 어 있다.다른 상황 에서 닻 의 위 치 는 형태학 연산 결과 의 조정 에 만 사용 된다.
다음 에 우 리 는 이 세 가지 모양 유형 을 모두 한 번 실현 할 것 이다.구체 적 인 코드 는 다음 과 같다.

import cv2

img = cv2.imread("open.jpg", cv2.IMREAD_UNCHANGED)
kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT,(50,50))
kernel2 = cv2.getStructuringElement(cv2.MORPH_CROSS,(50,50))
kernel3 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(50,50))
result1 = cv2.dilate(img,kernel1)
result2 = cv2.dilate(img,kernel2)
result3 = cv2.dilate(img,kernel3)
cv2.imshow("img", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)
cv2.imshow("result3", result3)
cv2.waitKey()
cv2.destroyAllWindows()
실행 후 효 과 는 다음 과 같 습 니 다.
结构元函数
여기 서 OpenCV-Python 의 유 니 버 설 형태학 함수 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 OpenCV 유 니 버 설 형태학 함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기