การหาขอบของภาพ ถูกนำมาใช้เพื่อหลายวัตถุประสงค์ เช่น เพื่อ segment ภาพนั้นออกเป็นส่วนๆ หรือ เพื่อเป็นกระบวนการเบื้องต้นสำหรับการหาเส้นตรง หรือวงกลมในภาพ ฯลฯ ในที่นี้เราจะลองใช้คำสั่งสำเร็จรูปของ OpenCV เพื่อหาขอบภาพ ด้วยสามวิธี ได้แก่
Canny
import cv2 import numpy as np img = cv2.imread("lena.jpg",cv2.CV_LOAD_IMAGE_GRAYSCALE) #Appy Gaussian blur to remove some noises inoise = cv2.GaussianBlur(img,(3,3),sigmaX=0) #Canny edge detection lowThresh = 50 upThresh = 100 out = cv2.Canny(inoise,lowThresh,upThresh) cv2.imshow("Origin",img) cv2.imshow("Edge Detection",out) cv2.waitKey() cv2.destroyAllWindows()
Sobel
#Gradient X gradX = cv2.Sobel(inoise,cv2.CV_16S,dx=1,dy=0) #Gradient Y gradY = cv2.Sobel(inoise,cv2.CV_16S,dx=0,dy=1) #Convert Gradients to 8 bits gradX = cv2.convertScaleAbs(gradX) gradY = cv2.convertScaleAbs(gradY) #Total Gradient (approximate) #grad = abs(gradX) + abs(gradY) out = cv2.addWeighted(gradX,1,gradY,1,0)
Laplacian
out = cv2.Laplacian(inoise,ddepth=cv2.CV_16S,ksize=3) #Need to set depth to 16-bit signed integer because Laplacian can give negative intensity. # Convert it to 8-bit image with absolute value. out = cv2.convertScaleAbs(out)
อยากจะคุยด้วยจังเลยครับ !!
ReplyDeleteถ้าสะดวกผมจะดีใจมาก
ขอบคุณล่วงหน้าครับ
รบกวนติดต่อผมด้วยนะครับ ที่ Facebook : https://www.facebook.com/patipan.cloud.1
ReplyDelete