이 문제에서는 Python이 이미지 또는 비디오 파일의 가장자리를 감지하는 방법을 볼 것입니다. 이를 위해서는 OpenCV 라이브러리가 필요합니다. OpenCV 라이브러리는 주로 컴퓨터 비전용으로 설계되었습니다. 오픈 소스입니다. 원래 인텔에서 설계했습니다. 오픈 소스 BSD 라이선스에 따라 무료로 사용할 수 있습니다.
OpenCV 기능을 사용하려면 pip.를 사용하여 다운로드해야 합니다. OpenCV는 Numpy 모듈을 다운로드합니다. 그것도 필요할 것입니다.
sudo pip3 install opencv-python
입력으로 이 경우 하나의 비디오 파일을 사용했습니다. 웹캠을 사용하여 이 가장자리 감지 절차의 실시간 효과를 볼 수도 있습니다.
여기서는 비디오 파일을 사용하고 있습니다. 실제 이미지(동영상의 프레임)는 이렇습니다 -
<중앙>가장자리 감지는 어떻게 작동합니까?
가장자리를 감지하기 위해 픽셀의 밝기가 뚜렷하게 변화하는지 확인하는 몇 가지 수학적 관찰이 있습니다.
이미지의 회색조 버전에 대한 그라디언트를 찾아야 합니다. 컴퓨터 비전에서 픽셀이 검은색에서 흰색으로 이동할 때 양의 기울기로 표시됩니다. 흰색에서 검은색으로의 전환의 경우 음의 기울기입니다.
이미지의 파생물을 사용한 에지 감지
이미지는 매트릭스로 저장되며, 해당 매트릭스의 각 요소는 모든 픽셀에 대한 정보를 보유합니다. 미분을 찾으려면 Laplacian 연산자가 필요합니다. 따라서 Laplacian을 얻으려면 먼저 Sobel 도함수가 필요합니다. 이러한 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
출력
<중앙>수직 소벨 파생 상품(Sobel Y)
유사하게 우리는 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
출력
<중앙>라플라시안 도함수
마침내 우리는 이미지의 라플라시안 도함수를 보게 될 것입니다. 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