Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah kaedah operasi morfologi dalam Python+OpenCV

Apakah kaedah operasi morfologi dalam Python+OpenCV

WBOY
WBOYke hadapan
2023-05-28 15:16:061468semak imbas

1. Kakisan dan pengembangan

1.1 Operasi kakisan

import cv2
import numpy as np

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

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

dige.png paparan gambar asal 1 (Nota: Jika anda tidak mempunyai gambar asal, anda boleh mengambil tangkapan skrin dan simpannya secara setempat.

Apakah kaedah operasi morfologi dalam Python+OpenCV

Selepas 1 pusingan kakisan~ (lelaran = 1)

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

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

Gambar paparan hasil kakisan 2:

Apakah kaedah operasi morfologi dalam Python+OpenCV

Kesan menghakis bulatan beberapa kali, dan prinsip kakisan

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

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

pie.pngGambar asal 3:

Apakah kaedah operasi morfologi dalam Python+OpenCV

Prinsip Kakisan, semakin besar saiz penapis, semakin tinggi tahap kakisanRajah 4:

Apakah kaedah operasi morfologi dalam 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()

Paparan tiga hasil kakisan bulatRajah 5:

Apakah kaedah operasi morfologi dalam Python+OpenCV

1.2 Operasi pengembangan

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()

Gambar 2 sebelum pengembangan, I mendapati bahawa garisan menjadi lebih tebal, hampir sama dengan garisan dalam gambar asal, tetapi ia telah hilang Bunyi-bunyi berjanggut panjang itu, Rajah 6:

Apakah kaedah operasi morfologi dalam Python+OpenCV

Kesan mengembangkan bulatan beberapa kali, dan prinsip pengembangan adalah bertentangan dengan kakisan, dengan penapisan titik putih , data dalam penapis semuanya akan bertukar menjadi putih

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()

Hasil pengembangan bulatan 3 kali, Rajah 7:

Apakah kaedah operasi morfologi dalam Python+OpenCV

2. Operasi buka dan operasi tutup

2.1 Operasi buka

# 开:先腐蚀,再膨胀
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()

Hakis dan kemudian kembangkan gambar asal 1 untuk mendapatkan hasil operasi pembukaanRajah 8:

Apakah kaedah operasi morfologi dalam Python+OpenCV

2.2 Operasi tertutup

# 闭:先膨胀,再腐蚀
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()

Mula-mula kembangkan dan kemudian menghakis imej asal 1 untuk mendapatkan hasil operasi terbukaRajah 9:

Apakah kaedah operasi morfologi dalam Python+OpenCV

3. Operasi kecerunan

Ambil bulatan gambar asal 3, lakukan 5 kali pengembangan, 5 kali pengaratan, dan tolak untuk mendapatkan garis besarnya. Dapatkan hasil operasi kecerunan

Rajah 10:

<.>Apakah kaedah operasi morfologi dalam Python+OpenCV

4. Topi atas dan topi hitamApakah kaedah operasi morfologi dalam Python+OpenCV

4.1 Topi Atas

Topi Atas = Input asal - Hasil operasi terbuka

# 梯度=膨胀-腐蚀
pie = cv2.imread(&#39;DataPreprocessing/img/pie.png&#39;)
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(&#39;res&#39;, res)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

cv2.imshow(&#39;gradient&#39;, gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
Dapatkan hasil topi atasRajah 11:

4.2 Topi HitamApakah kaedah operasi morfologi dalam Python+OpenCV

Topi Hitam = operasi tertutup - input asal

# 礼帽
img = cv2.imread(&#39;DataPreprocessing/img/dige.png&#39;)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow(&#39;tophat&#39;, tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
dapatkan hasil topi teratasRajah 12:

Atas ialah kandungan terperinci Apakah kaedah operasi morfologi dalam Python+OpenCV. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam