Python + opencv for Dynamic Object Recognition, pythonopencv
Note: This method is very affected by light changes.
Figure of the result of your mobile phone shaking at home:
Source code:
#-*-Coding: UTF-8-*-"Created on Wed Sep 27 15:47:54 2017 @ author: tina" import cv2 import numpy as np camera = cv2.VideoCapture (0) # parameter 0 indicates the first camera # determine whether the video is enabled if (camera. isOpened (): print ('open') else: print ('camera not Open ') # for testing, view video size = (int (camera. get (cv2.CAP _ PROP_FRAME_WIDTH), int (camera. get (cv2.CAP _ PROP_FRAME_HEIGHT) print ('size: '+ repr (size) es = cv2.getStructuringElement (cv2.MORP) H_ELLIPSE, (9, 4) kernel = np. ones (5, 5), np. uint8) background = None while True: # Read the video stream grabbed, frame_lwpCV = camera. read () # pre-process the frame, first convert the grayscale image, and then perform Gaussian filtering. # Reasons for fuzzy processing using Gaussian filter: each input video will produce noise due to natural vibration, illumination changes, or camera itself. The noise is smoothed to avoid detection during motion and tracking. Direction = cv2.cvtColor (frame_lwpCV, cv2.COLOR _ BGR2GRAY) gray_lwpCV = direction (gray_lwpCV, (21, 21), 0) # set the first frame to the entire input background if background is None: background = gray_lwpCV continue # For each frame read from the background, the difference between the frame and Beijing is calculated and a difference map (different map) is obtained ). # You also need to apply a threshold value to get a black-and-white image, and use the following code to expand the image so that the hole and defect (imperfection) perform normalization diff = cv2.absdiff (background, gray_lwpCV) diff = cv2.threshold (diff, 148,255, cv2.THRESH _ BINARY) [1] # diff = cv2.dilate (diff, es, iterations = 2) # morphological expansion # display Rectangular Box image, contours, hierarchy = cv2.findContours (diff. copy (), cv2.RETR _ EXTERNAL, cv2.CHAIN _ APPROX_SIMPLE) # Calculate the target contour of an image for c in contours: if cv2.contourA Rea (c) <1500: # For the rectangular area, only the outlines greater than the given threshold are displayed, so some minor changes are not displayed. For cameras with unchanged illumination and low noise, do not set the minimum contour size threshold (continue (x, y, w, h) = cv2.boundingRect (c) # This function calculates the rectangle boundary box cv2.rectangle (frame_lwpCV, (x, y), (x + w, y + h), (0,255, 0), 2) cv2.imshow ('second s', frame_lwpCV) cv2.imshow ('dis ', diff) key = cv2.waitKey (1) & 0xFF # Press 'q' to exit the loop if key = ord ('q'): break # When everything done, release the capture camera. release () cv2.destroyAllWindows ()
The above is all the content of this article. I hope it will be helpful for your learning and support for helping customers.