这是我的第一篇博文,写这个系列的博客是因为自己想改变一下。好了废话不多说,深度学习与计算机视觉最近几年非常火,而它们又跟人工智能有着紧密的联系。虽然对人来说,用人眼去观察这个世界很容易,但对于一切皆为0和1的计算机而言,这却是相当困难的。而我写这篇博客的目的之一,一方面是巩固自己最近所学的知识,另一方面也是希望我的博客可以给那些想入门计算机视觉同学提供帮助。

(一)安装对应的环境

环境的安装和配置,我推荐使用anaconda,它可以帮你配置多种环境和帮你导入各种第三方库,非常方便。至于如何使用它,我在这就不多说了,B站和CSDN上都有方法。对于程序的编辑我推荐使用pycharm,当然你也可以选择其他的编辑环境。

(二)读取图片(cv2.imread)

cv2.imread((filename, flags=None)读入图像,
flags=-1:读取为BGRA,即包含透明度(如一些PNG图片);
flags=0:读取为灰度图;
flags=1:读取彩色图,默认为BGR方法;
给函数返回的图像矩阵


import cv2

image1 = cv2.imread('lena.png', -1)
image2 = cv2.imread('lena.png', 0)  #cv2.IMREAD_GRAYSCALE():以灰度模式读入图像
image3 = cv2.imread('lena.png', 1)  #cv2.IMREAD_COLOR():读入彩色图像

(三)显示图片(cv2.imshow)

为了显示图片并看见图片,你需要这几个函数
cv2.imshow()显示图像,
cv2.namedWindow()改变窗口的大小 PS:这个函数自行百度吧,使用方法都有
cv2.waitKey():这是一个和键盘绑定的函数,它的作用是等待一个键盘的输入,只有执行键盘输入,程序才会在延迟 delay 毫秒后继续进行,在此之前窗口一直存在;
cv2.destroyAllWindows()可以轻易删除任何我们建立的窗口,括号内输入想删除的窗口名

上代码

import cv2
img1 = cv2.imread('lena.png', -1)
img2 = cv2.imread('lena.png', 0)  #cv2.IMREAD_GRAYSCALE():以灰度模式读入图像
img3 = cv2.imread('lena.png', 1)  #cv2.IMREAD_COLOR():读入彩色图像

cv2.imshow("Lena1 ",img1)#显示
cv2.imshow("Lena2 ",img2)#显示
cv2.imshow("Lena3 ",img3)#显示

cv2.waitKey(0)

加载一个灰度图,显示图片,按下‘q’键保存后退出,或者按下ESC键退出不保存

import cv2

img = cv2.imread('lena.png',0)
cv2.imshow('image',img)

k = cv2.waitKey(0)

if k == ord('q'):
        cv2.imwrite('gray.png',img)  #wait for 'q' key to save and exit

试试吧

(四)读取视频(cv2.VideoCapture)

这时,我们需要这个函数帮助我们完成工作
cv2.VideoCapture(filename)
其中 filename 可以是视频路径,也可以是整数(表示摄像头索引,前置摄像头默认为 0);
当代码报错时,可以使用cap.isOpened()来检查是否成功初始化了,返回值是True,就没有问题,否则就要使用cap.open()。
可以使用cap.get(propId)来获取视频的一些参数信息。propId可以是0到18之间的任何数,每一个数代表一个属性,自己可以尝试一下。
其中一些值可以使用cap.set(propId,value)来修改,例如cap.get(3)和cap.get(4)来查看每一帧的宽和高,默认是640x480。我们可以使用ret=cap.set(3,320)和ret = cap.set(4,240)来把宽和高改成320x240(注:该函数回改变图像质量,所以改变窗口建议使用cv2.namedWindow())。
PS:cv2.waitKey()可改变视频的播放的速度。

import cv2
cap = cv2.VideoCapture("test_video.mp4")#文件名及格式
while True:
    success, img = cap.read()
    cv2.imshow("Result", img)
    if cv2.waitKey(1) & 0xFF == ord('q'): #按q键退出
        break

(五)用摄像头捕获视频(cv2.VideoCapture)

这里也需要使用cv2.VideoCapture()函数

import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth) #注:该函数会改变图像质量
cap.set(4, frameHeight) #注:该函数会改变图像质量
cap.set(10,150)
while True:
    success, img = cap.read()
    cv2.imshow("Result", img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

(六)视频流的一些属性

索引 flags 意义
0 cv2.CAP_PROP_POS_MSEC 视频文件的当前位置(ms)
1 cv2.CAP_PROP_POS_FRAMES 从0开始索引帧,帧位置
2 cv2.CAP_PROP_POS_AVI_RATIO 视频文件的相对位置(0表示开始,1表示结束)
3 cv2.CAP_PROP_FRAME_WIDTH 视频流的帧宽度
4 cv2.CAP_PROP_FRAME_HEIGHT 视频流的帧高度
5 cv2.CAP_PROP_FPS 帧率
6 cv2.CAP_PROP_FOURCC 编解码器四字符代码
7 cv2.CAP_PROP_FRAME_COUNT 视频文件的帧

比如说,你想获取一段视频的帧率

fps=cap.get(cv2.CAP_PROP_FPS)
#当然,你也可以写写成下面这种形式
fps=cap.get(5)

又比如说,你想获得视频的总帧数,你可以这样写

count=int(cap.get(cv2.CAP_PROP_FRAME_COUNT))#这里需要将其转化为int型

上面我并没有列举出说有的视频属性(好像一共有18个),感兴趣的小伙伴可以百度看看。这里之所以列举这些视频的属性,是因为在某些视频的处理中,这些属性都会被经常用到。

(七)备注

在这部分在,我们使用了几个常用的图像处理函数
其中cv2.namedWindow(),cap.set(),这两个函数都是值得你深挖的

学习opencv有很多的方法,我的建议是你可以加一些群,可以充分利用B站,CSDN,和百度。

在我的博客中,我不会讲解opencv的算法实现(当然我也不太会),我只会讲解一些函数的调用,不理解就多改一些参数,多尝试尝试,慢慢你就理解来。相信你总有一天可以说opencv不过“Ctrl+C,Crtl+V”

(八)结语

如果有什么错误的地方,还请大家批评指正,最后,希望小伙伴们都能有所收获。

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐