L'article suivant vous expliquera comment définir la résolution de la caméra et divers paramètres dans python opencv. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Jetons un coup d'œil ensemble
1 Pour obtenir la vidéo, vous devez créer un objet VideoCapture. Son paramètre peut être le numéro d'index de l'appareil, ou un fichier vidéo. Le numéro d'index de l'appareil spécifie la caméra à utiliser. La plupart des ordinateurs portables sont équipés de caméras intégrées. Le paramètre est donc 0. Vous pouvez sélectionner une autre caméra en la réglant sur 1 ou autre chose. Après cela, vous pouvez capturer la vidéo image par image. Mais enfin, n'oubliez pas d'arrêter de capturer la vidéo. Utilisez la commande ls /dev/video* pour afficher le périphérique caméra
2, cap.read() renvoie une valeur booléenne (Vrai/Faux). Vrai si le cadre est lu correctement. Donc enfin, vous pouvez vérifier si le fichier vidéo a atteint la fin en vérifiant sa valeur de retour. Parfois, le capuchon peut ne pas réussir à initialiser l'appareil photo. Dans ce cas, le code ci-dessus signalera une erreur. Vous pouvez utiliser cap.isOpened() pour vérifier si l'initialisation a réussi. Si la valeur de retour est True, il n'y a pas de problème. Sinon utilisez la fonction cap.open(). Vous pouvez utiliser la fonction cap.get(propId) pour obtenir des informations sur les paramètres de la vidéo. Ici, propId peut être n’importe quel entier compris entre 0 et 18. Chaque numéro représente un attribut de la vidéo. Voir le tableau. Certaines valeurs peuvent être modifiées à l'aide de cap.set(propId,value). La valeur est
la nouvelle valeur que vous souhaitez définir. Par exemple, je peux utiliser cap.get(3) et cap.get(4) pour voir la largeur et la hauteur de chaque image. Par défaut, la valeur résultante est 640X480. Mais je peux utiliser ret=cap.set(3,320) et ret=cap.set(4,240) pour modifier la largeur et la hauteur en 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()
Recommandations associées :
Méthode de conversion de la taille d'image python opencv
Explication détaillée de la méthode de fonctionnement de base de Python-OpenCV_ python
Explication détaillée d'exemples de python utilisant opencv pour lire des images
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!