python opencv设置摄像头分辨率以及各个参数

来源:互联网 发布:网络机顶盒一般多少钱 编辑:程序博客网 时间:2024/06/04 17:59

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 cv2import numpyfrom hlf_module import hlf_definefrom std_msgs.msg import Stringimport matplotlib.pyplot as plotimport xml.dom.minidomimport pylabimport rospyimport timecap = 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.documentElementitemlist = root.getElementsByTagName('login')item = itemlist[0]max_value=item.getAttribute("max")min_value=item.getAttribute("min")return max_value,min_valuedef 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 framecv2.imshow("capture", gray)faces = face_casade.detectMultiScale(gray,1.2,5) #检测人脸#print len(faces)if len(faces)>0:#判断是否检测到人脸result = ()max_face = 0value_x=0for (x,y,w,h) in faces:if (w*h > max_face): #检测最大人脸max_face = w*hresult = (x,y,w,h)# max_face.append(width*height)x=result[0]w=result[2]z=value_x=value_x+x+w/2return zelse:return 1if __name__=='__main__':face=Detect_face()motor_max,motor_min= face.head_motor_value()x=[]i=1while 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=1else:i +=1print (U'未检测到人脸')if cv2.waitKey(1) & 0xFF == ord('q'):breakexcept Exception,e:print ecap.release()cv2.destroyAllWindows()

原创粉丝点击