OpenCV - 1 图片读取、生成简单图像、视频读取

 读取、显示、保存:

import cv2
a = cv2.imread('E:/picture/lena.jpg',0) #0为灰色,1为彩色,-1包含透明通道的彩色图
cv2.imshow('lena',a)  #此处必须有个命名,可以为空 eg:cv2.imshow('',a)
cv2.waitKey(0) #暂停多少毫秒,0表示一直暂停
cv2.imwrite('C:/Users/10611/Desktop/lena.jpg',a) #将a输出到桌面上

生成图像输出

import cv2
import numpy as np
width = 256
height = 256
img = np.zeros([width, height, 3], dtype=np.uint8)
for i in range(width):
    for j in range(height):
        for k in range(3):
            img[i,j,k]=i
cv2.imshow('A',img)
cv2.waitKey(0)

如果控制RGB三通道的值是一样的,输出出来的图像就是全黑的,因为同等的红绿蓝加起来是黑色。

打开摄像头:

实时显示摄像头

# 打开摄像头并灰度化显示
import cv2
capture = cv2.VideoCapture(0) 
while(True):
    ret, frame = capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    # 将这帧转换为灰度图
    cv2.imshow('frame', gray)
    if cv2.waitKey(1) == ord('q'):
        break

整体理解为:通过read读取一帧,show来显示当前帧,waitKey(1)将确保在每毫秒的间隔后生成一个新帧,通过while来进行遍历。如果我们将waitkey里面的参数改成500,即500ms刷新一次,就会发现视频帧率变低了。

1、cv2.VideoCapture()函数:
cap = cv2.VideoCapture(0)
VideoCapture()中参数是0,表示打开笔记本的内置摄像头。
cap = cv2.VideoCapture("…/1.avi")
VideoCapture("…/1.avi"),表示参数是视频文件路径则打开视频。

2、cap.isOpened()函数:
返回true表示成功,false表示不成功

3、ret,frame = cap.read()函数:
cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵(即RGB)。
所以把代码改成这样就是彩色图像:

import cv2
capture = cv2.VideoCapture(0) 
while(True):
    ret, frame = capture.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) == ord('q'):
        break

4、cv2.cvtColor()用来转换颜色,这里将彩色图转成灰度图。

5、关于cv2.waitkey()的理解

播放本地视频

# 播放本地视频
capture = cv2.VideoCapture('demo_video.mp4')
while(capture.isOpened()):
    ret, frame = capture.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #灰度显示
    cv2.imshow('frame', gray)
    if cv2.waitKey(30) == ord('q'):
        break

录制视频

import cv2
cap=cv2.VideoCapture(0)
fourcc=cv2.VideoWriter_fourcc(*'MJPG')
outfile=cv2.VideoWriter('output.avi',fourcc,25.,(640,480))

while(cap.isOpened()):
    ret,frame=cap.read()
    if ret: #如果成功捕获一帧
        outfile.write(frame) #输出这一帧
        cv2.imshow('frame',frame) #展示当前帧
        if cv2.waitKey(1)==ord('q'): #控制帧率和是否结束
            break
    else: #如果没有成功捕获则退出
        break

1、cv2.VideoWriter_fourcc():表示编码方式,有DIVX , XVID , MJPG , X264 , WMV1 , WMV2等等(XVID是最好的,MJPG是高尺寸视频,X264得到小尺寸视频)

2、cv2.VideoWriter():有四个参数:

        输出的文件名,如'output.avi'
        编码方式FourCC码(1里面定义的)
        帧率FPS
        要保存的分辨率大小

3、 outfile.write():通过此方法输出获取的当前帧

参考:

python中VideoCapture(),read(),waitKey()的使用_hanshanbuleng的博客-CSDN博客

CodecWang's Blog

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值