前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python学习教程.1

OpenCV-Python学习教程.1

作者头像
云深无际
发布2021-04-14 11:05:17
5530
发布2021-04-14 11:05:17
举报
文章被收录于专栏:云深之无迹云深之无迹

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

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

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

代码语言:javascript
复制
import cv2
import numpy as np
cap = cv2.VideoCapture(1)
while(True):
    ret, frame = cap.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyWindows()

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

代码语言:javascript
复制
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位char
brightness = 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的时候会有限制,可以自己去打开这个限制。

代码语言:javascript
复制
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'的名字不变,这样每一帧会覆盖上一帧,就产生了视频的效果。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档