下面就為大家分享一篇python opencv設定攝影機解析度以及各個參數的方法,具有很好的參考價值,希望對大家有幫助。一起過來看看吧
1,為了取得影片,你應該建立一個 VideoCapture 物件。 他的參數可以是設備的索引號,或是一個視訊檔。設備索引號就是在指定要使用的攝影機。一般的筆記型電腦都有內建相機。所以參數就是 0。你可以透過設定成 1 或其他的來選擇別的攝影機。之後,你就可以一幀一幀的捕捉影片了。但是最後,別忘了停止捕捉影片。使用 ls /dev/video*指令可以檢視攝影機裝置
2,cap.read() 傳回一個布林值(True/False)。 如果幀讀取的是正確的,就是 True。所以最後你可以透過檢查他的回傳值來查看影片檔是否已經到了結尾。有時 cap 可能不能成功的初始化攝影機設備。這種情況下上面的程式碼會報錯。你可以使用 cap.isOpened(),來檢查是否成功初始化了。如果回傳值是True,那就沒有問題。否則就要使用函數 cap.open()。你可以使用函數 cap.get(propId) 來獲得影片的一些參數資訊。這裡propId 可以是 0 到 18 之間的任何整數。每一個數代表影片的一個屬性,見表其中的一些值可以使用cap.set(propId,value) 來修改,value 就是
你想要設定成的新值。例如,我可以使用 cap.get(3) 和 cap.get(4) 來查看每一幀的寬和高。預設得到的值是 640X480。但我可以用 ret=cap.set(3,320)和 ret=cap.set(4,240) 來把寬和高改成 320X240。
CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds. • CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next. • CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film. • CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream. • CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream. • CV_CAP_PROP_FPS Frame rate. • CV_CAP_PROP_FOURCC 4-character code of codec. • CV_CAP_PROP_FRAME_COUNT Number of frames in the video file. • CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() . • CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode. • CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras). • CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras). • CV_CAP_PROP_SATURATION Saturation of the image (only for cameras). • CV_CAP_PROP_HUE Hue of the image (only for cameras). • CV_CAP_PROP_GAIN Gain of the image (only for cameras). • CV_CAP_PROP_EXPOSURE Exposure (only for cameras). • CV_CAP_PROP_CONVERT_RGB Boolean flags whether images should be converted to RGB. indicating • CV_CAP_PROP_WHITE_BALANCE Currently unsupported • CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend cur-rently
#!/usr/bin/env python # -*- coding: utf-8 -*- import cv2 import numpy from hlf_module import hlf_define from std_msgs.msg import String import matplotlib.pyplot as plot import xml.dom.minidom import pylab import rospy import time cap = cv2.VideoCapture(0) cap.set(3,640) #设置分辨率 cap.set(4,480) fps =cap.get(cv2.CAP_PROP_FPS) #获取视频帧数 face_casade = cv2.CascadeClassifier('/opt/ros/kinetic/share/OpenCV-3.2.0-dev/haarcascades/haarcascade_frontalface_default.xml') Node_name='neck' #print cap.isOpened() class Detect_face(): def __init__(self): '''定义节点Node_name(全局变量,而非具体名称)''' self.err_pub=hlf_define.err_publisher()#错误消息发布者 rospy.init_node(Node_name,anonymous=True) self.neck_puber=rospy.Publisher(hlf_define.TOPIC_ACTION_NECK,String,queue_size=10) time.sleep(0.5) def head_motor_value(self):#解析xml文件 获取舵机的范围值 dom = xml.dom.minidom.parse('/home/sb/catkin_ws/src/hlf_robot/scripts/hlf_action/head_value.xml') #得到文档元素对象 root = dom.documentElement itemlist = root.getElementsByTagName('login') item = itemlist[0] max_value=item.getAttribute("max") min_value=item.getAttribute("min") return max_value,min_value def detect_face(self): # get a frame #frame=cv2.imread('/home/sb/桌面/timg.jpeg') ret, frame = cap.read() gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#转成灰度图 #frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) # show a frame cv2.imshow("capture", gray) faces = face_casade.detectMultiScale(gray,1.2,5) #检测人脸 #print len(faces) if len(faces)>0:#判断是否检测到人脸 result = () max_face = 0 value_x=0 for (x,y,w,h) in faces: if (w*h > max_face): #检测最大人脸 max_face = w*h result = (x,y,w,h) # max_face.append(width*height) x=result[0] w=result[2] z=value_x=value_x+x+w/2 return z else: return 1 if __name__=='__main__': face=Detect_face() motor_max,motor_min= face.head_motor_value() x=[] i=1 while True: try: z=face.detect_face() if z != 1: x.append(z) if len(x)>(fps-1): true_x = int(sum(x)/30) if(true_x>319): motor_value=int(1500+(int(motor_max)-1500)*(true_x-319)/320)#转换成舵机值 头部向左转 face.neck_puber.publish('%s'%motor_value) elif (true_x<319): motor_value=int(1500-(1500-int(motor_min))*(319-true_x)/320) face.neck_puber.publish('%s'%motor_value) x=[] else: if i==fps: face.neck_puber.publish('1500') i=1 else: i +=1 print (U'未检测到人脸') if cv2.waitKey(1) & 0xFF == ord('q'): break except Exception,e: print e cap.release() cv2.destroyAllWindows()
相關推薦:
########################## ###
以上是python opencv設定攝影機解析度以及各個參數的方法_python的詳細內容。更多資訊請關注PHP中文網其他相關文章!