OpenCV-Python 부식 과 팽창 을 실현 하 는 실례

형태학
부식 을 이해 하기 전에 우 리 는 형태학 이라는 개념 을 알 아야 한다.
형태학 은 수학 형태학(Mathematical Morphology)이 라 고도 부 르 며 이미지 처리 과정 에서 매우 중요 한 연구 방향 이다.형태학 은 주로 이미지 에서 분량 정 보 를 추출 하 는데 이 분량 정 보 는 이미지 의 모양 을 표현 하고 묘사 하 는 데 중요 한 의 미 를 가지 고 이미지 가 이해 할 때 사용 하 는 가장 본질 적 인 모양 특징 이다.
예 를 들 어 손 으로 쓴 숫자 를 식별 할 때 형태학 연산 을 통 해 골조 정 보 를 얻 을 수 있 고 구체 적 으로 식별 할 때 그 골조 에 대해 서 만 연산 하면 된다.형태학 처 리 는 시각 검 측,문자 인식,의학 이미지 처리,이미지 압축 코드 등 분야 에서 매우 중요 한 응용 을 한다.
형태학 조작 은 주로 부식,팽창,개폐 연산,폐 연산,형태학 경사도 연산,캡 연산,검 은 모자 연산 등 조작 을 포함한다.부식 조작 과 팽창 조작 은 형태학 의 연산 기초 로 부식 과 팽창 을 결합 하면 연산,폐 연산,형태학 경사도 등 서로 다른 형식의 연산 을 실현 할 수 있다.
그래서 이 박문 은 부식 과 팽창 에 중점 을 두 고 설명 할 것 이다.
부식
부식 은 가장 기본 적 인 형태학 작업 중 하나 로 이미지 의 경계 점 을 없 애고 이미 지 를 경 계 를 따라 안 으로 수축 시 킬 수 있 으 며 지 정 된 구조 체 요소 보다 작은 부분 을 제거 할 수 있다.부식 은 주로'수축'또는'세분 화'2 치 이미지 의 전망 에 사용 되 는데 이 를 통 해 소음 제거,요소 분할 등 기능 을 실현 한다.
부식 되 는 과정 에서 일반적으로 하나의 구조 원 을 사용 하여 부식 되 려 는 이미 지 를 픽 셀 별로 스 캔 하고 구조 원 과 부식 되 는 이미지 의 관계 에 따라 부식 결 과 를 확인한다.
우선,부식 처리 도 를 살 펴 보 자.
腐蚀矩阵
(1)부 식 될 그림 표시
(2)구조 원
(3)주황색 숫자 는 구조 원 이 이미 지 를 옮 겨 다 닐 때 구조 원 이 전경 대상 내부 에 있 을 때 3 개의 모든 가능 한 위치 이다.이때 구조 원 은 각각 img[2,1],img[2,2],img[2,3]에 있다.
(4)부식 결과 result,즉 구조 원 이 전경 이미지 에 완전히 있 을 때 그 중의 중심 점 에 대응 하 는 result 중의 픽 셀 점 의 값 을 1 로 설정 합 니 다.구조 원 이 전경 이미지 에 완전히 있 지 않 을 때 중심 점 에 대응 하 는 result 의 픽 셀 점 을 0 으로 설정 합 니 다.(자리 순
OpenCV 에서 함수 cv2.erode()를 사용 하여 부식 작업 을 실현 하 는데 그 완전한 정 의 는 다음 과 같다.

def erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None):
src:원본 이미지
kernel:구조 원,사용자 정의 가능,함수 cv2.getStructuringElement()를 통 해 생 성 가능
iterations:부식 작업 교체 횟수,기본 값 은 1,즉 한 번 만 수행 합 니 다.
다른 매개 변수 와 수치 에 대해 앞의 박문 에 모두 소개 되 어 있 는데 여 기 는 군말 이 아니다.
다음은 이 함 수 를 사용 하여 부식 작업 을 테스트 합 니 다.

import cv2
import numpy as np

img = cv2.imread("8.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((9,9), np.float32)
result = cv2.erode(img,kernel)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
실행 한 후에 우리 가 얻 은 효과 대비 도 는 다음 과 같다.
腐蚀
부식 작업 이 원본 이미지 의 가 시 를 부식 시 키 는 것 을 볼 수 있 습 니 다.더 심하게 부식 시 키 려 면 iterations 매개 변수의 값 을 설정 할 수 있 습 니 다.
팽창 하 다.
팽창 과 부식 은 정반 대로 팽창 은 이미지 의 경 계 를 확장 할 수 있다.팽창 작업 은 현재 대상(전망)과 접촉 한 배경 점 을 현재 대상 에 합 쳐 이미지 경계 점 을 밖으로 확장 합 니 다.그림 속 두 대상 의 거리 가 가 까 우 면 팽창 후 연결 할 수 있 습 니 다.
팽창 작업 은 이미지 분할 후 이미지 에 존재 하 는 공백 을 메 우 는 데 상당히 도움 이 된다.마찬가지 로 팽창 도 하나의 구조 원 이 조작 해 야 한다.다음은 팽창 의 원 리 를 행렬 로 설명 하 자.
膨胀
(1)팽창 을 기다 리 는 원 도
(2)구조 원
(3)오렌지색 부분 은 구조 원 이 원 도 를 옮 겨 다 닐 때 구조 원 중심 픽 셀 점 이[1,1],img[3,3]에 있 을 때 전경 색 과 겹 치 는 픽 셀 점 이 존재 하 는 두 가지 상황 으로 실제 적 으로 모두 9 개의 전망 대상 과 겹 칠 수 있 는 위치 가 있다.구조 원 중심 은 각각 img[1,1],img[1,2],img[1,3],img[2,1],img[2,2],img[2,3],img[3,1],img[3,2],img[3,3]에 위치한다.
(4)팽창 한 결과 이미지 result 는 구조 원 에서 임의의 픽 셀 점 이 전경 대상 과 겹 칠 때 중심 점 에 대응 하 는 팽창 결과 이미지 안의 픽 셀 점 의 값 은 1 이다.구조 원 과 전경 대상 이 완전히 겹 치지 않 을 때 중심 점 에 대응 하 는 팽창 결과 이미지 내 픽 셀 점 의 값 은 0 이다.(자리
OpenCV 에서,이것 은 우리 에 게 cv2.dilate()를 제공 하여 이미지 에 대한 팽창 작업 을 실현 합 니 다.그 전체 정 의 는 다음 과 같다.

def dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None): 
src:원본 이미지
kernel:구조 원
기타 매개 변 수 는 앞에서 말 한 것 과 일치 하 며,군말 하지 않 는 다.다음은 이 함 수 를 사용 하여 팽창 효 과 를 측정 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.

import cv2
import numpy as np

img = cv2.imread("8.jpg",cv2.IMREAD_UNCHANGED)
kernel = np.ones((9,9), np.float32)
result = cv2.dilate(img,kernel)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()
실행 후 효 과 는 다음 과 같 습 니 다.
膨胀
그림 의 두상 이 팽창 한 후 몸 과 연결 되 고 옆 선 도 굵 어 지 는 것 을 볼 수 있다.더 심하게 팽창 하려 면 iterations 매개 변수의 값 을 수정 할 수 있 습 니 다.
여기 서 OpenCV-Python 의 부식 과 팽창 을 실현 하 는 실례 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 OpenCV 의 부식 과 팽창 에 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기