一.最简单的调用笔记本内置相机
import cv2
#引入库
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
cv2.imshow("Video", frame)
#读取内容
if cv2.waitKey(10) == ord("q"):
break
#随时准备按q退出
cap.release()
cv2.destroyAllWindows()
#停止调用,关闭窗口
import cv2
import os
#引入库
print("=============================================")
print("= 热键(请在摄像头的窗口使用): =")
print("= z: 更改存储目录 =")
print("= x: 拍摄图片 =")
print("= q: 退出 =")
print("=============================================")
#提醒用户操作字典
class_name = input("请输入存储目录:")
while os.path.exists(class_name):
class_name = input("目录已存在!请输入存储目录:")
os.mkdir(class_name)
#存储
index = 1
cap = cv2.VideoCapture(0)
width = 640
height = 480
w = 360
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
crop_w_start = (width-w)//2
crop_h_start = (height-w)//2
print(width, height)
#设置特定值
while True:
ret, frame = cap.read()
frame = frame[crop_h_start:crop_h_start+w, crop_w_start:crop_w_start+w]
#没理解?
frame = cv2.flip(frame,1,dst=None)
#镜像显示
cv2.imshow("capture", frame)
#显示
input = cv2.waitKey(1) & 0xFF
if input == ord('z'):
class_name = input("请输入存储目录:")
while os.path.exists(class_name):
class_name = input("目录已存在!请输入存储目录:")
os.mkdir(class_name)
#存储
elif input == ord('x'):
cv2.imwrite("%s/%d.jpeg" % (class_name, index),
cv2.resize(frame, (224, 224), interpolation=cv2.INTER_AREA))
print("%s: %d 张图片" % (class_name, index))
index += 1
#?
if input == ord('q'):
break
#退出
cap.release()
cv2.destroyAllWindows()
#关闭窗口
参考博客:opencv_python版调用摄像头、显示内容 https://blog.csdn.net/yang123p/article/details/79831697
python+openCV调用摄像头拍摄和处理图片 https://blog.csdn.net/weixin_43344725/article/details/83214833
笔记:
1.1、cap = cv2.VideoCapture(0)
videoCapture(0) 参数0表示调用笔记本内置摄像头
videoCapture("e:\emp\cp.avi") 参数路径 表示调用存储的视频
videocapture有获得照相机的一切权利的感觉 所以后期可以用cap.read()对照相机的镜头取镜
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture("../test.avi")
1.2.ret frame = cap.read()
ret frame 是调用 cap.read()的两个返回值 read就是一直调用一直返回很多帧所以返回的好像是一个连续的视频,要保证一直调用,所以要一直返回一个true值使它不断继续调用,所以ret是一个布尔值,返回true则继续调用,返回false说明调用完毕或出现调用错误。关于frame就是每一帧的图像,是一个三维矩阵。frame是一个类似于文件夹/包,不断的读取一帧一帧的照片进去,到后面用到窗口显示时,再对frame进行解包,释放出一帧一帧的图像,就像视频一样。
1.3.cv2.imshow("vedio",frame)
1.4.关于frame (自己的理解,有待考证)
有多少接收多少 有多少释放多少自带“循环”,不用外部给它循环从而输出视频,它的视频的显示和图像的显示基本是一样的
1.5.waitkey()函数功能:
cv2.waitKey顾名思义等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片
1.6.显示图像cv2.imshow()
使用函数cv2.imshow() 显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,其次才是我们的图像。你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字。
cv2.imshow('image',img)
1.7.为什么使用Python-OpenCV
虽然python 很强大,而且也有自己的图像处理库PIL,但是相对于OpenCV 来讲,它还是弱小很多。跟很多开源软件一样OpenCV 也提供了完善的python 接口,非常便于调用。OpenCV 的稳定版是2.4.8,最新版是3.0,包含了超过2500 个算法和函数,几乎任何一个能想到的成熟算法都可以通过调用OpenCV 的函数来实现,超级方便。
1.8.大写+下划线"_"格式
cv2.imread() 读入图像
cv2.IMREAD_COLOR 加了一个模式(用彩色模式)
cv2.IMREAD_GRAYSCALE 加了一个模式(用灰度模式)
总结:当调用imread时 如果要用特定的模式 可以用下划线+大写这样特殊的表达以表示用特殊的
模式调用imread
1.9.python语言没有switch 常用if elif
二.常见操作
参考:openCV-Python笔记二:视频捕获 https://blog.csdn.net/djcxym/article/details/52177220
2.1关于propld
可以使用函数 cap.get(propId) 来获得视频的一些参数信息。这里 propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性,其中的一些值可以使用 cap.set(propId,value) 来修改,value 就是 你想要设置成的新值。
例如,可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。 默认情况下得到的值是 640X480。但是可以使用 cap.set(3,320) 和 cap.set(4,240) 来把宽和高改成 320X240。
propId为以下值:[加粗为应用过的]
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 indicating whether images should be converted to RGB.
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)
三.Python3 opencv 连接 usb 摄像头
import cv2
#调用usb摄像头
cap = cv2.VideoCapture(camera_id)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc("M","J","P","G")) #?1为啥要重设
#显示
while True:
ret, frame = cap.read()
cv2.imshow("window1",frame)
if cv2.waitKey(1)&0xFF == ord("q"):
break
#关闭
cap.release()
cv2.destroyAllWindows()
参考博客 Python3 opencv 链接 usb 摄像头 https://blog.csdn.net/weixin_42271658/article/details/82874524
3.1.fourcc
视频播放软件通过查询 FourCC 代码并且寻找与 FourCC 代码相关联的视频解码器来播放特定的视频流
3.2.time.time() 返回当前的时间戳
http://www.runoob.com/python/att-time-time.html
四.参考
Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()
https://blog.csdn.net/winner_looser/article/details/81162052
OpenCV中cv2.waitKey()相关
https://www.jianshu.com/p/cf1d12a070fe?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
openCV-Python笔记二:视频捕获
https://blog.csdn.net/djcxym/article/details/52177220
fourcc (four caractor code 四符代码)
https://baike.baidu.com/item/fourcc/6168470?fr=aladdin