1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- """
- @file sobel_demo.py
- @brief Sample code using Sobel and/or Scharr OpenCV functions to make a simple Edge Detector
- """
- import sys
- import cv2 as cv
- def main(argv):
- ## [variables]
- # First we declare the variables we are going to use
- window_name = ('Sobel Demo - Simple Edge Detector')
- scale = 1
- delta = 0
- ddepth = cv.CV_16S
- ## [variables]
- ## [load]
- # As usual we load our source image (src)
- # Check number of arguments
- if len(argv) < 1:
- print ('Not enough parameters')
- print ('Usage:\nmorph_lines_detection.py < path_to_image >')
- return -1
- # Load the image
- src = cv.imread(argv[0], cv.IMREAD_COLOR)
- # Check if image is loaded fine
- if src is None:
- print ('Error opening image: ' + argv[0])
- return -1
- ## [load]
- ## [reduce_noise]
- # Remove noise by blurring with a Gaussian filter ( kernel size = 3 )
- src = cv.GaussianBlur(src, (3, 3), 0)
- ## [reduce_noise]
- ## [convert_to_gray]
- # Convert the image to grayscale
- gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
- ## [convert_to_gray]
- ## [sobel]
- # Gradient-X
- # grad_x = cv.Scharr(gray,ddepth,1,0)
- grad_x = cv.Sobel(gray, ddepth, 1, 0, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
- # Gradient-Y
- # grad_y = cv.Scharr(gray,ddepth,0,1)
- grad_y = cv.Sobel(gray, ddepth, 0, 1, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
- ## [sobel]
- ## [convert]
- # converting back to uint8
- abs_grad_x = cv.convertScaleAbs(grad_x)
- abs_grad_y = cv.convertScaleAbs(grad_y)
- ## [convert]
- ## [blend]
- ## Total Gradient (approximate)
- grad = cv.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)
- ## [blend]
- ## [display]
- cv.imshow(window_name, grad)
- cv.waitKey(0)
- ## [display]
- return 0
- if __name__ == "__main__":
- main(sys.argv[1:])
|