1. import time
  2. import cv2
  3. import numpy as np
  4. from os import path
  5. import pickle
  6.  
  7. '''
  8. 关于camera id 此处需要稍微说几句。一般我们测试时,可能会通过USB使用多个摄像头,也可能是笔记本自带摄像头。这个时候,通过id号来读摄像头的图像或者视频,
  9. 就要关于摄像头的id号到底对应哪个摄像头。在ubuntu下,我们知道打开笔记本自带摄像头是用茄子命令,即cheese,而查看摄像头的的id号,一般可以通过 ls /dev/video*,
  10. 这个命令是将所有摄像头设备都打印出来,比如打印出来有/dev/video0 /dev/video1,说明该电脑识别到两个摄像头,此时假设笔记本内置摄像头是video0,注意未必一定是0,需要测试,
  11. 我自己笔记本上外接USB摄像头时,就会出现外接的摄像头是video0.此时如果我们想使用别的摄像头video1呢, cheese —device=/dev/video1,这样就打开了另外一个摄像头了。
  12. 当然你也可以通过读摄像头的属性从而读到是第几个摄像头,这个网上有资料,稍微麻烦点。具体windows下,其实差不多,windows下可以通过设备查找。
  13. 对于ubuntu下,如果想查找各个相机对应的一些详细属性,可以通过工具v4l-utils,如果系统没有安装,则需要安装一下(sudo apt install v4l-utils
  14. ),然后可以查看系统的相机列表(v4l2-ctl --list-devices),而后可以查看各个相机的参数,比如分辨率等。(v4l2-ctl --device=/dev/video4 --list-formats-ext
  15. ),v4l2-ctl -d /dev/video0 --list-ctrls曝光增益等。具体可以参考官网:https://www.mankier.com/1/v4l2-ctl
  16.  
  17. '''
  18. cam_idx = 0
  19. #获取cap
  20. cam_cap = cv2.VideoCapture(cam_idx)#, cv2.CAP_DSHOW)
  21. #设置width,height。
  22. cam_cap.set(3, 640)
  23. cam_cap.set(4, 480)
  24. # cam_cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
  25. # cam_cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
  26.  
  27. '''
  28. virtual bool cv::VideoCapture::set ( int propId,
  29. double value
  30. )
  31. virtual
  32. Python:
  33. cv.VideoCapture.set( propId, value ) -> retval
  34. set函数的使用,其中propId是VideoCaptureProperties,详细很多,可以看一下官方介绍。常用的有如下几个。
  35. CAP_PROP_POS_MSEC
  36. Python: cv2.CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
  37.  
  38. CAP_PROP_POS_FRAMES
  39. Python: cv2.CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
  40.  
  41. CAP_PROP_POS_AVI_RATIO
  42. Python: cv2.CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0=start of the film, 1=end of the film.
  43.  
  44. CAP_PROP_FRAME_WIDTH
  45. Python: cv2.CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.设置video输出的宽度,这个设置只在此程序中有效,别的程序还是默认值
  46.  
  47. CAP_PROP_FRAME_HEIGHT
  48. Python: cv2.CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream. 设置video输出的高度,这个设置只在此程序中有效,别的程序还是默认值。
  49.  
  50. CAP_PROP_FPS
  51. Python: cv2.CAP_PROP_FPS Frame rate.
  52.  
  53. CAP_PROP_FOURCC
  54. Python: cv2.CAP_PROP_FOURCC 4-character code of codec. see VideoWriter::fourcc. 视频写入时需要设置的
  55.  
  56. CAP_PROP_FRAME_COUNT
  57. Python: cv2.CAP_PROP_FRAME_COUNT Number of frames in the video file. 注意这里是视频文件。
  58. '''
  59. '''
  60. 有set,就有get获取相应的属性。可以通过id号进行获取,当然也可以通过属性获取。
  61.  
  62. cv2.VideoCapture.get(0) CV_CAP_PROP_POS_MSEC 视频文件的当前位置(播放)以毫秒为单位
  63. cv2.VideoCapture.get(1) CV_CAP_PROP_POS_FRAMES 基于以0开始的被捕获或解码的帧索引
  64. cv2.VideoCapture.get(2) CV_CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
  65. cv2.VideoCapture.get(3) CV_CAP_PROP_FRAME_WIDTH 在视频流的帧的宽度
  66. cv2.VideoCapture.get(4) CV_CAP_PROP_FRAME_HEIGHT 在视频流的帧的高度
  67. cv2.VideoCapture.get(5) CV_CAP_PROP_FPS 帧速率
  68. cv2.VideoCapture.get(6) CV_CAP_PROP_FOURCC 编解码的4字-字符代码
  69. cv2.VideoCapture.get(7) CV_CAP_PROP_FRAME_COUNT 视频文件中的帧数
  70. cv2.VideoCapture.get(8) CV_CAP_PROP_FORMAT 返回对象的格式
  71. cv2.VideoCapture.get(9) CV_CAP_PROP_MODE 返回后端特定的值,该值指示当前捕获模式
  72. cv2.VideoCapture.get(10) CV_CAP_PROP_BRIGHTNESS 图像的亮度(仅适用于照相机)
  73. cv2.VideoCapture.get(11) CV_CAP_PROP_CONTRAST 图像的对比度(仅适用于照相机)
  74. cv2.VideoCapture.get(12) CV_CAP_PROP_SATURATION 图像的饱和度(仅适用于照相机)
  75. cv2.VideoCapture.get(13) CV_CAP_PROP_HUE 色调图像(仅适用于照相机)
  76. cv2.VideoCapture.get(14) CV_CAP_PROP_GAIN 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
  77. cv2.VideoCapture.get(15) CV_CAP_PROP_EXPOSURE 曝光(仅适用于照相机)
  78. cv2.VideoCapture.get(16) CV_CAP_PROP_CONVERT_RGB 指示是否应将图像转换为RGB布尔标志
  79. cv2.VideoCapture.get(17) CV_CAP_PROP_WHITE_BALANCE × 暂时不支持
  80. cv2.VideoCapture.get(18) CV_CAP_PROP_RECTIFICATION 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
  81. 对应序号可以从opencv官方文件中查看得到。
  82. enum cv::VideoCaptureProperties {
  83. cv::CAP_PROP_POS_MSEC =0,
  84. cv::CAP_PROP_POS_FRAMES =1,
  85. cv::CAP_PROP_POS_AVI_RATIO =2,
  86. cv::CAP_PROP_FRAME_WIDTH =3,
  87. cv::CAP_PROP_FRAME_HEIGHT =4,
  88. cv::CAP_PROP_FPS =5,
  89. cv::CAP_PROP_FOURCC =6,
  90. cv::CAP_PROP_FRAME_COUNT =7,
  91. cv::CAP_PROP_FORMAT =8,
  92. cv::CAP_PROP_MODE =9,
  93. cv::CAP_PROP_BRIGHTNESS =10,
  94. cv::CAP_PROP_CONTRAST =11,
  95. cv::CAP_PROP_SATURATION =12,
  96. cv::CAP_PROP_HUE =13,
  97. cv::CAP_PROP_GAIN =14,
  98. cv::CAP_PROP_EXPOSURE =15,
  99. cv::CAP_PROP_CONVERT_RGB =16,
  100. cv::CAP_PROP_WHITE_BALANCE_BLUE_U =17,
  101. cv::CAP_PROP_RECTIFICATION =18,
  102. cv::CAP_PROP_MONOCHROME =19,
  103. cv::CAP_PROP_SHARPNESS =20,
  104. cv::CAP_PROP_AUTO_EXPOSURE =21,
  105. cv::CAP_PROP_GAMMA =22,
  106. cv::CAP_PROP_TEMPERATURE =23,
  107. cv::CAP_PROP_TRIGGER =24,
  108. cv::CAP_PROP_TRIGGER_DELAY =25,
  109. cv::CAP_PROP_WHITE_BALANCE_RED_V =26,
  110. cv::CAP_PROP_ZOOM =27,
  111. cv::CAP_PROP_FOCUS =28,
  112. cv::CAP_PROP_GUID =29,
  113. cv::CAP_PROP_ISO_SPEED =30,
  114. cv::CAP_PROP_BACKLIGHT =32,
  115. cv::CAP_PROP_PAN =33,
  116. cv::CAP_PROP_TILT =34,
  117. cv::CAP_PROP_ROLL =35,
  118. cv::CAP_PROP_IRIS =36,
  119. cv::CAP_PROP_SETTINGS =37,
  120. cv::CAP_PROP_BUFFERSIZE =38,
  121. cv::CAP_PROP_AUTOFOCUS =39,
  122. cv::CAP_PROP_SAR_NUM =40,
  123. cv::CAP_PROP_SAR_DEN =41,
  124. cv::CAP_PROP_BACKEND =42,
  125. cv::CAP_PROP_CHANNEL =43,
  126. cv::CAP_PROP_AUTO_WB =44,
  127. cv::CAP_PROP_WB_TEMPERATURE =45,
  128. cv::CAP_PROP_CODEC_PIXEL_FORMAT =46,
  129. cv::CAP_PROP_BITRATE =47,
  130. cv::CAP_PROP_ORIENTATION_META =48,
  131. cv::CAP_PROP_ORIENTATION_AUTO =49,
  132. cv::CAP_PROP_OPEN_TIMEOUT_MSEC =53,
  133. cv::CAP_PROP_READ_TIMEOUT_MSEC =54
  134. }
  135. '''
  136. print (cam_cap.get(3)) # 注意返回的是浮点型数据,因此如果你要用这个返回值,注意一下数据类型。
  137.  
  138. frames = []
  139. while (cam_cap.isOpened()):
  140. ret, frame = cam_cap.read()
  141. if not ret:
  142. print ('No camera')
  143. break
  144. # import pdb
  145. # pdb.set_trace()
  146. print (frame.shape)
  147.  
  148. frame_copy = frame.copy()
  149. cv2.imshow('origin', frame)
  150. # cv2.waitKey(0)
  151. if cv2.waitKey(20) & 0xFF == ord('q'):
  152. cv2.destroyAllWindows()
  153. break
  154.  
  155. cam_cap.release()
  156.  
  157. '''
  158. 以上程序是读视频流,直接摄像头读入数据的,如果你要读的是视频文件,那方式也差不多。只是更简单。如果视频文件不存在,ret会返回False.
  159. '''
  160. video_file = 'SampleVideo_1280x720_1mb.mp4'
  161. video_cap = cv2.VideoCapture(video_file)
  162. print ('video file width',video_cap.get(3))
  163. print ('video file height',video_cap.get(4))
  164. print ('video file fps',video_cap.get(cv2.CAP_PROP_FPS)) # 注意这些属性在python下使用时,没有CV_,而C++中有的。
  165. print ('video file totoal frames.',video_cap.get(cv2.CAP_PROP_FRAME_COUNT))
  166. '''
  167. video file width 1280.0
  168. video file height 720.0
  169. video file fps 25.0
  170. video file totoal frames. 132.0
  171. '''
  172. while True:
  173. ret, frame = video_cap.read()
  174. if not ret:
  175. break
  176.  
  177. cv2.imshow('video file frame',frame)
  178. cv2.waitKey(25)
  179.  
  180. video_cap.release()
  181.  
  182. '''
  183. 以上都是单视频读,如果想多个视频同时读,可以使用多进程的方式。具体可参考另外一个程序.
  184. '''

  

opencv videocapture的更多相关文章

  1. Opencv VideoCapture实时捕捉摄像头信息

    #include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace cv; using ...

  2. opencv VideoCapture使用示例

    在centos7下验证VideoCapture功能. 1 opencv处理视频时要使用ffmpeg,这里使用添加源的方式安装,分为3步 1.1 先安装EPEL Release,使用其他的repo源,所 ...

  3. OpenCV VideoCapture.get()参数详解

    转自https://blog.csdn.net/u011436429/article/details/80604590 方便查阅

  4. Ubuntu下多个版本OpenCV管理(Multiple Opencv version)

    背景: 最近,在Nvidia的GPU嵌入式开发板Jetson TX1(简称TX1)上移植深度学习目标检测算法YOLO.在TX1上安装了官方提供的opencv版本——OpenCV4Tegra(OpenC ...

  5. GOQTTemplate3的多线程化改造

    GOQTTemplate3作为一个QT+OpenCV的平台,希望能够为使用者提供基础的跨平台的图像处理框架.图像处理算法和GUI两个线程的隔离,是必然需要的.在之前的版本中,都采用了OnTimer的方 ...

  6. 13行代码实现:Python实时视频采集(附源码)

    一.前言 本文是<人脸识别完整项目实战>系列博文第3部分:程序设计篇(Python版),第1节<Python实时视频采集程序设计>,本章内容系统介绍:基于Python+open ...

  7. AnswerOpenCV(1001-1007)一周佳作欣赏

    外国不过十一,所以利用十一假期,看看他们都在干什么. 一.小白问题 http://answers.opencv.org/question/199987/contour-single-blob-with ...

  8. opencv中VideoCapture和cvCapture有什么区别?

    VideoCapture和cvCapture其实是一样的,你可以去看看源码,VideoCapture其实在内部调用了cvCapture.这是不同 版本的opencv导致的.我接触到的opencv有过一 ...

  9. OpenCV教程【002 VideoCapture加载并播放视频】

    #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace c ...

随机推荐

  1. 利用laravel-echo主动向服务端发送消息,实现在线状态管理

    之前在网上翻了半天,也没有找到关于如何 通过laravel-echo主动发送消息 和 在laravel-websockets中自定义控制器 的文章或教程.无奈之下只能翻laravel-echo和lar ...

  2. ArrayList分析2 :Itr、ListIterator以及SubList中的坑

    ArrayList分析2 : Itr.ListIterator以及SubList中的坑 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/16409137.html ...

  3. NC20276 [SCOI2010]传送带

    NC20276 [SCOI2010]传送带 题目 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD ...

  4. Airbnb的动态kubernetes集群扩缩容

    Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...

  5. 什么是FastAPI异步框架?(全面了解)

    一:FastAPI框架 1.FastAPI是应该用于构建API的现代,快速(高性能)的 web 框架,使用Python 3.6+ 并基于标准的 Python 类型提示. 关键性: 快速: 可与Node ...

  6. 国产钡铼分布式IO模块如何与西门子PLC Profinet通讯

    1.准备IO模块:耦合器BL200PN.数字量输出模块M2082.数字量输入M1081.模拟量输入模块M3401.模拟量输出M4043. 编辑搜图 请点击输入图片描述(最多18字) ​2.BL200P ...

  7. Mac os:将Homebrew的下载源换成国内镜像增加下载速度(阿里云镜像)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_135 可能所有的mac os系统爱好者都遇到过下面这种倒霉情况,在网络环境不太好的时候,你满怀期待的敲下 brew install ...

  8. Java学习 (七)基础篇 变量

    变量 变量顾名思义,就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单位,其要素包括变量名.变量类型和作用域 type varName [=val ...

  9. DS队列----银行单队列多窗口模拟

    题目描述 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可选择时,假设顾客总是选择编号最小的窗口. 本 ...

  10. Web 布局设计(一):固定侧边栏

    前言 闲着无事,做一些实战练习,今天实现一个如标题所示的布局设计.通过此次布局设计,我希望掌握position属性值 fixed.absolute.relative.width和height属性值 i ...