写在前面的话:文章内容来源于但不限于网络、书籍、个人心得体会等,意在总结和方便各位同行快速参考,共同学习进步,记录自己的问题。错误在所难免,有请各位批评斧正 。 如有侵权,烦请第一时间通知,我会立即删除相关内容,万分感谢!
import numpy as np
import argparse
import time
import cv2
# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video",
help = "path to the (optional) video file")
args = vars(ap.parse_args())
# define the upper and lower boundaries for a color
# to be considered "blue"
blueLower = np.array([100,67,0],dtype="uint8")
blueUpper = np.array([255,128,50],dtype="uint8")
# load the video
if not args.get("video"):
camera = cv2.VideoCapture(0)
else:
camera = cv2.VideoCapture(args["video"])
# keep looping
while True:
# grab the current frame
(grabbed,frame) = camera.read()
# check to see if we have reached the end of the video
if not grabbed:
break
# determine which pixels fall within the blue boundaries
# and then blur the binary image
blue = cv2.inRange(frame,blueLower,blueUpper)
blue = cv2.GaussianBlur(blue,(3,3),0)
# find contours in the image
(_,cnts,_) = cv2.findContours(blue.copy(),cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
# check to see if any contours were found
if len(cnts) > 0:
# sort the contours and find the largest one --
# we will assume this contour coorespondes to the
# area of my phone
cnt = sorted(cnts,key=cv2.contourArea,reverse=True)[0]
# compute the (rotated) bounding box around then
# contour and then draw it
rect = np.int32(cv2.boxPoints(cv2.minAreaRect(cnt)))
cv2.drawContours(frame,[rect],-1,(0,255,0),2)
# show the frame and the binary image
cv2.imshow("Traccking",frame)
cv2.imshow("Binary",blue)
# if your machine is fast, it may display the frames in
# what appears to be 'fast forward' since more than 32
# frames per second are being displayed -- a simple hack
# is just to sleep for a tiny bit in between frames;
# however, if your computer is slow, you probably want to
# comment out this line
time.sleep(0.025)
# if the 'q' key is pressed, stop the loop
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# cleanup the camera and close any open windows
camera.release()
cv2.destroyAllWindows()