>백엔드 개발 >파이썬 튜토리얼 >Python+OpenCV의 형태학 연산 방법은 무엇입니까?

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-05-28 15:16:061478검색

1. 부식 및 팽창

1.1 부식 작업

import cv2
import numpy as np

img = cv2.imread('DataPreprocessing/img/dige.png')

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

dige.png 원본 사진 1 표시 (참고: 원본 사진이 없는 경우 스크린샷을 찍어 로컬에 저장할 수 있습니다.

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

후 1회 부식~ (반복=1)

kernel = np.ones((3, 3), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)

cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

부식 결과 표시 사진 2:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

다중 부식원의 효과와 부식 원리

pie = cv2.imread('DataPreprocessing/img/pie.png')

cv2.imshow('pie', pie)
cv2.waitKey(0)
cv2.destroyAllWindows()

pie.png원본 사진 3:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

부식 원리, 필터의 부식 원리는 크기가 클수록 부식 정도도 커집니다그림 4:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

kernel = np.ones((30, 30), np.uint8)
erosion_1 = cv2.erode(pie, kernel, iterations=1)
erosion_2 = cv2.erode(pie, kernel, iterations=2)
erosion_3 = cv2.erode(pie, kernel, iterations=3)
res = np.hstack((erosion_1, erosion_2, erosion_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

원형 부식의 세 가지 결과 표시그림 5:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

1.2 확장 작업

kernel = np.ones((3, 3), np.uint8)
dige_dilate = erosion
dige_dilate = cv2.dilate(erosion, kernel, iterations=1)

cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

확장 전, 그림 2에서 선이 더 두꺼워진 것을 발견했습니다. 원본 그림과 비교한 선은 거의 동일하지만 수염이 긴 장치의 노이즈가 없습니다. 그림 6:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

원을 여러번 확장한 효과이며, 팽창 원리는 부식과 반대입니다. 흰 반점이 있는 필터는 필터 안의 데이터가 모두 하얗게 변합니다.

pie = cv2.imread('DataPreprocessing/img/pie.png')

kernel = np.ones((30, 30), np.uint8)
dilate_1 = cv2.dilate(pie, kernel, iterations=1)
dilate_2 = cv2.dilate(pie, kernel, iterations=2)
dilate_3 = cv2.dilate(pie, kernel, iterations=3)
res = np.hstack((dilate_1, dilate_2, dilate_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

원을 3번 확장한 결과, 그림 7:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

2. 열기 작업 및 닫기 작업

2.1 열기 작업

# 开:先腐蚀,再膨胀
img = cv2.imread('DataPreprocessing/img/dige.png')

kernel = np.ones((5, 5), np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

원본 그림 1을 변경하고 먼저 부식한 다음 확장하여 열기 작업 결과를 얻습니다그림 8:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

2.2 닫힌 작업

# 闭:先膨胀,再腐蚀
img = cv2.imread('DataPreprocessing/img/dige.png')

kernel = np.ones((5, 5), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

원본 그림 1을 먼저 확장한 다음 부식하여 열린 작업의 결과를 얻습니다.그림 9:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

3 그라데이션 작업

원을 가져옵니다. 원본 그림 3, 확장을 5번, 침식을 5번 수행하고 빼기를 수행하여 윤곽선을 얻습니다.

# 梯度=膨胀-腐蚀
pie = cv2.imread('DataPreprocessing/img/pie.png')
kernel = np.ones((7, 7), np.uint8)
dilate = cv2.dilate(pie, kernel, iterations=5)
erosion = cv2.erode(pie, kernel, iterations=5)

res = np.hstack((dilate, erosion))

cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)

cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

그라디언트 연산 결과 얻기그림 10:

Python+OpenCV의 형태학 연산 방법은 무엇입니까?

IV, 모자와 검은 모자 Python+OpenCV의 형태학 연산 방법은 무엇입니까?

4.1 Top hat

Top hat = 원본 입력 - open 연산 결과

# 礼帽
img = cv2.imread('DataPreprocessing/img/dige.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
Get top hat 결과 그림 11:

4.2 Black hat Python+OpenCV의 형태학 연산 방법은 무엇입니까?

Black hat = 닫힌 연산 - 원본 Enter

# 黑帽
img = cv2.imread('DataPreprocessing/img/dige.png')
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat ', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()
모자 결과를 얻으려면사진 12:

위 내용은 Python+OpenCV의 형태학 연산 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제