ในปัญหานี้ เราจะมาดูกันว่า Python สามารถทำ Morphological Operations เช่น Erosion และ Dilation โดยใช้โมดูล OpenCV ได้อย่างไร ไลบรารี OpenCV ได้รับการออกแบบมาสำหรับการมองเห็นด้วยคอมพิวเตอร์เป็นหลัก เป็นโอเพ่นซอร์ส เดิมทีได้รับการออกแบบโดย Intel ใช้งานได้ฟรีภายใต้ใบอนุญาต BSD แบบโอเพนซอร์ส
ในการใช้ฟังก์ชัน OpenCV เราจำเป็นต้องดาวน์โหลดโดยใช้ pip .
sudo pip3 install opencv-python
Erosion Image คืออะไรและทำงานอย่างไร
ในการกัดเซาะ มันกัดเซาะขอบเขตของวัตถุเบื้องหน้า ใช้สำหรับลบจุดสีขาวเล็กๆ ออกจากภาพ การกัดเซาะยังสามารถใช้เพื่อแยกภาพที่เชื่อมต่อกันสองภาพที่เชื่อมต่อกัน
-
เคอร์เนลถูกสร้างขึ้นจากรูปภาพ เคอร์เนลเป็นเมทริกซ์ โดยที่ลำดับเป็นเลขคี่ เช่น 3, 5, 7
-
เลือกพิกเซลของภาพ พิกเซลนี้จะถูกเลือกเป็น 1 ก็ต่อเมื่อพิกเซลทั้งหมดภายใต้เคอร์เนลเป็น 1 มิฉะนั้นจะถูกกัดเซาะ
-
ดังนั้นพิกเซลทั้งหมดที่อยู่ใกล้ขอบเขตจะถูกละทิ้ง
-
ดังนั้นความหนาของวัตถุเบื้องหน้าจึงลดลง
Dilation Image คืออะไรและทำงานอย่างไร
ใน Dilation จะเพิ่มพื้นที่วัตถุ การกัดเซาะสามารถขจัดสัญญาณรบกวนสีขาว แต่ยังทำให้ภาพของเราเล็กลงด้วย ดังนั้นหลังจากการกัดเซาะ หากทำการขยายภาพ เราจะได้รับผลการกำจัดสัญญาณรบกวนที่ดีขึ้น นอกจากนี้ยังสามารถใช้ Dilation เพื่อเชื่อมส่วนที่แตกหักของวัตถุได้อีกด้วย
-
เคอร์เนลถูกสร้างขึ้นจากรูปภาพ เคอร์เนลเป็นเมทริกซ์ โดยที่ลำดับเป็นเลขคี่ เช่น 3, 5, 7
-
เลือกพิกเซลของภาพ พิกเซลนี้จะถูกเลือกเป็น 1 ต่อเมื่อพิกเซลทั้งหมดภายใต้เคอร์เนลคือ 1
-
เพิ่มพื้นที่สีขาวหรือขนาดของวัตถุเบื้องหน้าของภาพ
โค้ดตัวอย่าง
import cv2 import numpy as np input_image = cv2.imread('TP_logo.jpg', cv2.IMREAD_COLOR) kernel = np.ones((3,3), np.uint8) # set kernel as 3x3 matrix from numpy #Create erosion and dilation image from the original image erosion_image = cv2.erode(input_image, kernel, iterations=1) dilation_image = cv2.dilate(input_image, kernel, iterations=1) cv2.imshow('Input', input_image) cv2.imshow('Erosion', erosion_image) cv2.imshow('Dilation', dilation_image) cv2.waitKey(0) #wait for a key to exit