python|opencv|图片读取,显示,存储|视频捕获,保存|(以具体的实例,来说明库的作用)

1.图片

import cv2
#读入图像,第一个参数是图片的完整路径,第二个参数是以何种方式读取
'''
CV_LOAD_IMAGE_UNCHANGED = -1(含<-1的整数)—— 在每个通道中,每个像素的位深为8 bit,通道数(颜色)保持不变;
CV_LOAD_IMAGE_GRAYSCALE = 0 ——位深为8bit,通道数 = 1(灰度图);
CV_LOAD_IMAGE_COLOR = 1(含其余>1整数)——位深 = ?(不确定),通道数 = 3(BGR图);
CV_LOAD_IMAGE_ANYDEPTH = 2 —— 位深不变,通道数 = ?(在VS中测试为1,灰度图);
CV_LOAD_IMAGE_ANYCOLOR = 4 —— 位深 = ?, 通道数不变。
'''
img=cv2.imread('12.jpg',0)

#显示图片参数,第一个参数是窗口的名字,其次才是我们的图像
#cv2.imshow('image',img)
#cv2.imshow('1',img)
cv2.imshow('image',img)

#是一个键盘绑定函数,参数设定为等待时间,返回的参数是ASCII码值,参数为0则是长时间等待输入
#如果没有键盘输入,返回值为-1
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
    # 可以轻易删除任何我们建立的窗口
    cv2.destroyAllWindows()
    # 删除特定的窗口名称,在括号内输入删除的名称
    #cv2.destroyWindow('name')
elif k == ord('s'): # wait for 's' key to save and exit

    # 使用函数cv2.imwrite()来保存一个图像。首先需要一个文件名,之后才是你要保存的图像
    cv2.imwrite('messigray1.png',img)
    cv2.destroyAllWindows()

运行效果图:

请添加图片描述

2.视频

(1)用摄像头捕获视频

#用摄像头捕获视频
import cv2
'''
创建VideoCapture对象,它的参数可以是设备的索引号,或者一个文件。
设备索引号就是在指定要使用的摄像头。
一般的笔记本电脑都有内置摄像头。所以参数就是 0。
你可以通过设置成 1 或者其他的来选择别的摄像头。
'''
cap = cv2.VideoCapture(0)


while(True):
    # Capture frame-by-frame
    '''
ret, frame = cap.read()  cap = cv2.VideoCapture(0)
返回值含义:
    参数ret 为True 或者False,代表有没有读取到图片
    第二个参数frame表示截取到一帧的图片
其他情况说明:
    有时 cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报
错。你可以使用 cap.isOpened(),来检查是否成功初始化了。如果返回值是
True,那就没有问题。否则就要使用函数 cap.open()。
    其中的一些值可以使用 cap.set(propId,value) 来修改,value 就是你想要设置成的新值。
    例如,我可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。默认情况下得到的值是 640X480。但是我可以使用 ret=cap.set(3,320)和 ret=cap.set(4,240) 来把宽和高改成 320X240。
    '''
    ret, frame = cap.read()
    # Our operations on the frame come here

    '''
    cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
    cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
    cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
    '''
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # Display the resulting frame
    # 显示图片参数,第一个参数是窗口的名字,其次才是我们的图像
    # cv2.imshow('image',img)
    # cv2.imshow('1',img)
    cv2.imshow('frame',gray)

    #等候1ms,播放下一帧,或者按q键退出
    if  cv2.waitKey(1) & 0xFF == ord('q'):
         break
# When everything done, release the capture
#用来停止捕获视频
cap.release()
#关闭相应的显示窗口的
cv2.destroyAllWindows()

运行结果:

请添加图片描述

(2)从文件中播放和保存视频

import cv2
'''
注意:
与从摄像头中捕获一样,你只需要把设备索引号改成视频文件的名字。在
播放每一帧时,使用 cv2.waitKey() 设置适当的持续时间。如果设置的太低视
频就会播放的非常快,如果设置的太高就会播放的很慢(你可以使用这种方法
控制视频的播放速度)。通常情况下 25 毫秒就可以了。

cv2.VideoCapture(0)  cap = cv2.VideoCapture('video.avi')
创建VideoCapture对象,它的参数可以是设备的索引号,或者一个文件。
设备索引号就是在指定要使用的摄像头。
一般的笔记本电脑都有内置摄像头。所以参数就是 0。
你可以通过设置成 1 或者其他的来选择别的摄像头。
'''
cap = cv2.VideoCapture(0)


# Define the codec and create VideoWriter object
#VideoWriter_fourcc为视频编解码器
'''
cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
MPEG-4编码 .mp4 可指定结果视频的大小

cv2.VideoWriter_fourcc('X','2','6','4')
MPEG-4编码 .mp4 可指定结果视频的大小

cv2.VideoWriter_fourcc('I', '4', '2', '0')
该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件

cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')
该参数是MPEG-1编码类型,文件名后缀为.avi

cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小

cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')
该参数是Ogg Vorbis,文件名后缀为.ogv

cv2.VideoWriter_fourcc('F', 'L', 'V', '1')
该参数是Flash视频,文件名后缀为.flv
'''
fourcc = cv2.VideoWriter_fourcc(*'XVID')

'''
VideoWriter(filename, fourcc, fps, frameSize[, isColor]) -> <VideoWriter object>
    第一个参数是要保存的文件的路径
    fourcc 指定编码器
    fps 要保存的视频的帧率
    frameSize 要保存的文件的画面尺寸
    isColor 指示是黑白画面还是彩色的画面
'''
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

# cap.isOpened(),来检查是否成功初始化了
while(cap.isOpened()):
    '''
    ret, frame = cap.read()  cap = cv2.VideoCapture(0)
    返回值含义:
    参数ret 为True 或者False,代表有没有读取到图片
    第二个参数frame表示截取到一帧的图片
    '''
    ret, frame = cap.read()
    if ret==True:
        '''
        flip是opencv的一个图片翻转函数
        cv2.flip(src, flipCode[, dst])  # src为要操作的图像
        flipCode	Anno
            1	    水平翻转
            0	    垂直翻转
            -1	    水平垂直翻转
        '''
        frame = cv2.flip(frame,0)

        #写入帧
        out.write(frame)

        # 显示图片参数,第一个参数是窗口的名字,其次才是我们的图像
        # cv2.imshow('image',img)
        # cv2.imshow('1',img)
        cv2.imshow('frame',frame)

        # 等候1ms,播放下一帧,或者按q键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# Release everything if job is finished
#用来停止捕获视频
cap.release()
out.release()

#关闭相应的显示窗口的
cv2.destroyAllWindows()

运行截图
请添加图片描述

版权声明:本文为博主DBINGSEC原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_56607768/article/details/123227955

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年3月3日 下午5:52
下一篇 2022年3月3日 下午6:05

相关推荐