Rumah > Artikel > pembangunan bahagian belakang > Apakah kaedah operasi morfologi dalam Python+OpenCV
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.
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:
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:
Prinsip Kakisan, semakin besar saiz penapis, semakin tinggi tahap kakisanRajah 4:
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:
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:
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:
# 开:先腐蚀,再膨胀 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:
# 闭:先膨胀,再腐蚀 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:
Ambil bulatan gambar asal 3, lakukan 5 kali pengembangan, 5 kali pengaratan, dan tolak untuk mendapatkan garis besarnya. Dapatkan hasil operasi kecerunan
Rajah 10:
<.>
4. Topi atas dan topi hitam
4.1 Topi Atas# 梯度=膨胀-腐蚀 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()Dapatkan hasil topi atasRajah 11:
4.2 Topi Hitam
# 礼帽 img = cv2.imread('DataPreprocessing/img/dige.png') tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) cv2.imshow('tophat', 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!