基于颜色跟踪Python脚本

系统 188 0

写在前面的话:文章内容来源于但不限于网络、书籍、个人心得体会等,意在总结和方便各位同行快速参考,共同学习进步,记录自己的问题。错误在所难免,有请各位批评斧正 如有侵权,烦请第一时间通知,我会立即删除相关内容,万分感谢!  

            
              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()
            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论