OpenCV-Python学习教程.1

本次用到的是一款DELL的摄像头,比较便宜。因为自带的摄像头不太方便

先来一张捕获到的照片。虽然不太清晰但是已经够用了

因为最近做图形算法比较多,所以对cv2熟悉是必然的,倒是和以前的函数差不多,就是一些小细节不太一样。

import cv2import numpy as npcap = cv2.VideoCapture(1)while(True): ret, frame = cap.read() cv2.imshow('frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): breakcap.release()cv2.destroyWindows()

首先是对自己的摄像头做一个测试,这个代码会打开一个视频的捕获窗口

import cv2
win_name = 'VideoCaptureProperties'videoCapture = cv2.VideoCapture(1) # 调用相机
width = videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH) # 宽度height = videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 高度fps = videoCapture.get(cv2.CAP_PROP_FPS) # 帧率
fourcc = videoCapture.get(cv2.CAP_PROP_FOURCC) # 编解码器4位charbrightness = videoCapture.get(cv2.CAP_PROP_BRIGHTNESS) # 亮度,调用相机contrast = videoCapture.get(cv2.CAP_PROP_CONTRAST) # 对比度,调用相机saturation = videoCapture.get(cv2.CAP_PROP_SATURATION) # 饱和度,调用相机hue = videoCapture.get(cv2.CAP_PROP_HUE) # 色调,调用相机gain = videoCapture.get(cv2.CAP_PROP_GAIN) # 增益,调用相机exposure = videoCapture.get(cv2.CAP_PROP_EXPOSURE) # 曝光,调用相机
print('宽度:{}'.format(width))print('高度:{}'.format(height))print('帧率:{}'.format(fps))print('编解码器:{}'.format(fourcc))print('亮度:{}'.format(brightness))print('对比度:{}'.format(contrast))print('饱和度:{}'.format(saturation))print('色调:{}'.format(hue))print('增益:{}'.format(gain))print('曝光:{}'.format(exposure))
videoCapture.release()

这串代码是摄像头的基本信息的输出

稍等片刻就会打印出来

随手一算,30W

我们的下视摄像头是这个分辨率

因为是用的vscode,在jupyter里面输出大量的log的时候会有限制,可以自己去打开这个限制。

import cv2
# win_name = 'VideoCaptureProperties'win_name = 'da'
cv2.namedWindow(win_name)videoCapture = cv2.VideoCapture(1)
width = videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH) # 宽度height = videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 高度fps = videoCapture.get(cv2.CAP_PROP_FPS) # 帧率frame_count = videoCapture.get(cv2.CAP_PROP_FRAME_COUNT) # 总帧数time_count = int(frame_count / fps) # 总秒数fourcc = videoCapture.get(cv2.CAP_PROP_FOURCC) # 编解码器4位char
print('宽度:{}'.format(width))print('高度:{}'.format(height))print('帧率:{}'.format(fps))print('总帧数:{}'.format(frame_count))print('总秒数:{}'.format(time_count))print('编解码器:{}'.format(fourcc))
while True: ret, frame = videoCapture.read() if ret is True: cv2.imshow(win_name, frame)
time_current = int(videoCapture.get( cv2.CAP_PROP_POS_MSEC) / 1000) # 第几秒 frame_current = videoCapture.get(cv2.CAP_PROP_POS_FRAMES) # 第几帧 print('第{}秒 第{}帧'.format(time_current, frame_current))
if cv2.waitKey(25) & 0xFF == ord('q'): # q退出 break else: break
videoCapture.release()cv2.destroyAllWindows()

有用的代码是这些,来输出帧率

开始输出了

ret, frame = cap.read()读取每一帧,其中ret表示一个True/False的布尔值,用来表示是否读取成功。frame表示读取到的np.array类型的每一帧,就是图片。

这个里面是一些参数值,可以参考

具体使用就是直接用get方法读取

接着打印出来就好


而且也可以来修改对应得值:

对应的,使用 cap.set(propId,value) 来修改视频属性,value 就是你想要设置成的新值。

可以写成这样


我解释一下这个imshow为什么会预览视频:

cv2.imshow('frame',frame)将每一帧显示在一个叫frame的窗口上。这里解释一下,为什么这样显示在窗口上会产生视频的效果。操作图像的时候显示多幅图像的时候,若cv2.imshow() 指定相同的窗口名,这样后面显示的图片会覆盖前面的图片,而产生一个窗口。这里视频显示也是同样的道理,每次while循环,窗口'frame'的名字不变,这样每一帧会覆盖上一帧,就产生了视频的效果。


(0)

相关推荐