Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม Python ตรวจจับขอบของภาพโดยใช้ OpenCV


ในปัญหานี้ เราจะมาดูกันว่า Python สามารถตรวจจับขอบของไฟล์รูปภาพหรือวิดีโอได้อย่างไร เพื่อให้บรรลุสิ่งนี้ เราจำเป็นต้องมีไลบรารี OpenCV ไลบรารี OpenCV ได้รับการออกแบบมาสำหรับการมองเห็นด้วยคอมพิวเตอร์เป็นหลัก เป็นโอเพ่นซอร์ส เดิมทีได้รับการออกแบบโดย Intel ใช้งานได้ฟรีภายใต้ใบอนุญาต BSD แบบโอเพนซอร์ส

ในการใช้ฟังก์ชัน OpenCV เราจำเป็นต้องดาวน์โหลดโดยใช้ pip. OpenCV จะดาวน์โหลดโมดูล Numpy นั่นก็จำเป็นเช่นกัน

sudo pip3 install opencv-python

ตามที่ป้อน ในกรณีนี้ เราได้ใช้ไฟล์วิดีโอหนึ่งไฟล์ เรายังใช้เว็บแคมเพื่อดูเอฟเฟกต์แบบเรียลไทม์ของขั้นตอนการตรวจจับขอบนี้ได้

ที่นี่เราใช้ไฟล์วิดีโอ ภาพจริง (เฟรมของวิดีโอ) เป็นแบบนี้ −

โปรแกรม Python ตรวจจับขอบของภาพโดยใช้ OpenCV

การตรวจจับขอบทำงานอย่างไร

ในการตรวจจับขอบ มีการสังเกตทางคณิตศาสตร์เพื่อตรวจสอบว่าความสว่างของพิกเซลเปลี่ยนแปลงอย่างชัดเจนหรือไม่

เราจำเป็นต้องค้นหาการไล่ระดับสีสำหรับภาพเวอร์ชันสีเทา ในการมองเห็นด้วยคอมพิวเตอร์ เมื่อพิกเซลเปลี่ยนจากสีดำเป็นสีขาว จะถือว่ามีความชันเป็นบวก สำหรับการเปลี่ยนจากสีขาวเป็นสีดำ จะเป็นความชันเชิงลบ

การตรวจจับขอบโดยใช้อนุพันธ์ของรูปภาพ

รูปภาพถูกจัดเก็บเป็นเมทริกซ์ โดยที่แต่ละองค์ประกอบของเมทริกซ์นั้นเก็บข้อมูลเกี่ยวกับพิกเซลทั้งหมด ในการหาต้นตอ เราต้องการโอเปอเรเตอร์ Laplacian เพื่อให้ได้ลาปลาเซียน อันดับแรก เราต้องอนุพันธ์โซเบล อนุพันธ์ของ Sobel เหล่านี้ใช้เพื่อให้ได้รูปแบบการไล่ระดับสีของรูปภาพ

อนุพันธ์โซเบลแนวนอน (Sobel X)

อนุพันธ์ของ Sobel นี้ได้มาจากการบิดภาพจริงและเมทริกซ์อื่น (เรียกว่าเคอร์เนล) เคอร์เนลคือเมทริกซ์ 3x3 สำหรับตัวพิมพ์ธรรมดา

มีฟังก์ชันที่เรียกว่า sobel() . การใช้ฟังก์ชันนี้ เราสามารถหาอนุพันธ์ของโซเบลได้ เมื่อเราพยายามหา Sobel x ส่วน y ควรจะเป็น 0

โค้ดตัวอย่าง

import cv2
import numpy as np
capture = cv2.VideoCapture('sample_video.mp4') #Capture frames from video file.
while(capture.isOpened()): # Run the loop until the video ends
   ret, frame = capture.read() #Fetch the frames from video
   # Convert BGR color to (Hue Saturation Value) mode
   hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
   # The Sobelx Method
   sobelx = cv2.Sobel(frame,cv2.CV_64F,1,0,ksize=5)
   cv2.imshow('SobelX',sobelx)
   k = cv2.waitKey(5) & 0xFF
   if k == 27: #27 is the ASCII for ESC key. When ESC is pressed, it will stop
      break
capture.release()
cv2.destroyAllWindows() #Clean memory after removing the windows

ผลลัพธ์

โปรแกรม Python ตรวจจับขอบของภาพโดยใช้ OpenCV

อนุพันธ์ Sobel แนวตั้ง (Sobel Y)

ในทำนองเดียวกัน เราสามารถหาอนุพันธ์ของ Vertical Sobel ได้โดยใช้ฟังก์ชัน sobel() ในกรณีนี้ ส่วน x จะเป็น 0

โค้ดตัวอย่าง

import cv2
import numpy as np
capture = cv2.VideoCapture('sample_video.mp4') #Capture frames from video file.
while(capture.isOpened()): # Run the loop until the video ends
   ret, frame = capture.read() #Fetch the frames from video
   # Convert BGR color to (Hue Saturation Value) mode
   hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
   # The Sobely Method
   sobely = cv2.Sobel(frame,cv2.CV_64F,0,1,ksize=5)
   cv2.imshow('SobelY',sobely)
   k = cv2.waitKey(5) & 0xFF
   if k == 27: #27 is the ASCII for ESC key. When ESC is pressed, it will stop
      break
capture.release()
cv2.destroyAllWindows() #Clean memory after removing the windows

ผลลัพธ์

โปรแกรม Python ตรวจจับขอบของภาพโดยใช้ OpenCV

อนุพันธ์ของ Laplacian

สุดท้ายเราจะเห็น Laplacian Derivative ของภาพ มีฟังก์ชันที่เรียกว่า Laplacian() ใช้เพื่อหาอนุพันธ์

โค้ดตัวอย่าง

import cv2
import numpy as np
capture = cv2.VideoCapture('sample_video.mp4') #Capture frames from video file.
while(capture.isOpened()): # Run the loop until the video ends
   ret, frame = capture.read() #Fetch the frames from video
   # Convert BGR color to (Hue Saturation Value) mode
   hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
   # The Laplacian Method
   laplacian = cv2.Laplacian(frame,cv2.CV_64F)
   cv2.imshow('Laplacian',laplacian)
   k = cv2.waitKey(5) & 0xFF
   if k == 27: #27 is the ASCII for ESC key. When ESC is pressed, it will stop
      break
capture.release()
cv2.destroyAllWindows() #Clean memory after removing the windows

ผลลัพธ์

โปรแกรม Python ตรวจจับขอบของภาพโดยใช้ OpenCV