123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/usr/bin/env python
- '''
- This program demonstrates Laplace point/edge detection using
- OpenCV function Laplacian()
- It captures from the camera of your choice: 0, 1, ... default 0
- Usage:
- python laplace.py <ddepth> <smoothType> <sigma>
- If no arguments given default arguments will be used.
- Keyboard Shortcuts:
- Press space bar to exit the program.
- '''
- # Python 2/3 compatibility
- from __future__ import print_function
- import numpy as np
- import cv2 as cv
- import sys
- def main():
- # Declare the variables we are going to use
- ddepth = cv.CV_16S
- smoothType = "MedianBlur"
- sigma = 3
- if len(sys.argv)==4:
- ddepth = sys.argv[1]
- smoothType = sys.argv[2]
- sigma = sys.argv[3]
- # Taking input from the camera
- cap=cv.VideoCapture(0)
- # Create Window and Trackbar
- cv.namedWindow("Laplace of Image", cv.WINDOW_AUTOSIZE)
- cv.createTrackbar("Kernel Size Bar", "Laplace of Image", sigma, 15, lambda x:x)
- # Printing frame width, height and FPS
- print("=="*40)
- print("Frame Width: ", cap.get(cv.CAP_PROP_FRAME_WIDTH), "Frame Height: ", cap.get(cv.CAP_PROP_FRAME_HEIGHT), "FPS: ", cap.get(cv.CAP_PROP_FPS))
- while True:
- # Reading input from the camera
- ret, frame = cap.read()
- if ret == False:
- print("Can't open camera/video stream")
- break
- # Taking input/position from the trackbar
- sigma = cv.getTrackbarPos("Kernel Size Bar", "Laplace of Image")
- # Setting kernel size
- ksize = (sigma*5)|1
- # Removing noise by blurring with a filter
- if smoothType == "GAUSSIAN":
- smoothed = cv.GaussianBlur(frame, (ksize, ksize), sigma, sigma)
- if smoothType == "BLUR":
- smoothed = cv.blur(frame, (ksize, ksize))
- if smoothType == "MedianBlur":
- smoothed = cv.medianBlur(frame, ksize)
- # Apply Laplace function
- laplace = cv.Laplacian(smoothed, ddepth, 5)
- # Converting back to uint8
- result = cv.convertScaleAbs(laplace, (sigma+1)*0.25)
- # Display Output
- cv.imshow("Laplace of Image", result)
- k = cv.waitKey(30)
- if k == 27:
- return
- if __name__ == "__main__":
- print(__doc__)
- main()
- cv.destroyAllWindows()
|