Opencv:open computer vision:开源的计算机视觉
文章目录
- 前言
- opencv是什么?
- OpenCV-python的初始利用
- 1.安装OpenCV
- 2.读取图像,展示图像,存储图像。
- 3.图像的属性
- 4.视频文件的读取
- 总结
前言
opencv是什么?
opencv是什么?计算机视觉初学者(例如我),在接触opencv之前就已经接触过了,cv这个东西,我们都知道他是计算机视觉的简写,而加上open之后,无非就是加了开源两个字,字面意思。
OpenCV是一个开源,跨平台的计算机视觉和机器学习软件库,含有很多图像处理以及计算机视觉的通用算法。它虽然是用c++编写的,但却兼具了python和java等其他语言的接口,这使得我们可以用python去使用它。
值得注意的是,OpenCV虽然非常多跨平台中高层的API但是它却不依赖与其他外部包,同时却可以使用一些外部包
OpenCV-python的初始利用
1.安装OpenCV
对python环境已经安装好的设备来说,安装OpenCV无非就是一个pip命令。
pip install opencv-python -i https:///simple/
执行该命令时,可能会报错或者警告,但是大致情况都是要求用户在命令的尾部加上一个trusted…,表示信任该下载端,一般加上就可以解决。
测试是否安装成功
import cv2 as cv等它跑一会,如果不报错的话一般就表示安装成功了。如下:

2.读取图像,展示图像,存储图像。
这里我用的是jupyter notebook,代码同样可以执行在cmd,pycharm等等环境上。
以下操作完成了对图像的简单操作
import cv2 as cv
src=cv.imread('test_1.jpg',0)
cv.namedWindow('input_1',cv.WINDOW_AUTOSIZE)
cv.imshow('input_1',src)
cv.waitKey(0)
cv.destroyAllWindows()
cv.imwrite('test_2.png',src)imread方法:cv2.imread()总共有两个参数
参数1:文件路径
参数2:读取文件的方式,一般包含三种可以直接用1,0,-1表示
1:正常读取图像
0:读取灰度图像,就是我们常见的灰度图
-1:加载图像以及它的alpha通道,alpha通道指的是:一张图片的透明度和半透明度
- namedWindow()方法:使用一个windows的GUI页面,我们需要用到这个GUI将图像显示出来。
- imshow()方法:将图片展示到制定的GUI上。
- waitkey(x)方法:该方法表示等待x毫秒,如果在这期间按下某个键,则会返回该键位的ascll,0为特殊情况,当x为0时表示等待无限长时间,直到按下某个键位为止。
- destroyAllWindows(x)方法:字面意思,关闭所有的GUI窗口。
- imwrite()方法:两个参数:参数一:存储文件的路径和名称;参数二:图像信息
执行结果为:

以上为正常的执行结果。
3.图像的属性
上面提供的第一段代码是非常基本的一个读存的操作,接下里我们细细看一下,对计算机来说,这个图像到底是什么。首先,我们运行一下代码(随便找个图像文件即可)
import cv2 as cv
src=cv.imread('test_1.jpg',1)
print(src)我们会得到这样一组数据:

很明显它是一堆矩阵,没错,对计算机来说,所谓的图片,其实就是一个多维的矩阵,我们时长关注图片的三个重要属性,高度,宽度,通道执行以下方法:
def get_image_info(image):
print(image)
print(image.shape)
print('图片的大小:',image.size)
print('字节位数:',image.dtype)
、
- 这里的一堆矩阵也就是计算机眼中,这个图像的本质了。
- (333,500,3)表示高度为333,宽度为500,3表示通道数,即每个像素点有3个通道。
- 字节位数即,每个通道点所占有的字节位是多少位,8位表示一个字节。
- 这个图片的大小很容易得到3335003*1=499500
4.视频文件的读取
视频文件也是图像文件的一种,这里我们直接通过调用摄像头来获取视频文件并提取每一帧图像。
代码:
def get_video():
capture=cv.VideoCapture(0)#调用摄像头
while True:
ret,frame=capture.read()
#将图像倒转过来
frame=cv.flip(frame,1)
cv.imshow('video',frame)
c=cv.waitKey(50)
if c==27 :
break- cv.VideoCapture(0):表示调用默认摄像头,这里的0,应该是一个filename的参数,表示调用什么摄像头,这里直接为0则默认。
- capture.read():返回两个值,第一个是布尔值,若能正确获取帧,则返回True,否则返回false,到文件末位也返回False。第二个返回值就是一堆矩阵了,也就是每一帧图像。
- cv.flip(frame,1):第一个参数为图像,第二个参数为处理方式,我们再调用摄像头的电脑反馈过来的图像是镜像,我们用1将其倒转过来。1表示水平方向翻转,0表示垂直翻转
这段代码获取到的图像其实是有停顿的,只是我的waitley参数设置的很小,完全感觉不到,如果延迟设置到1000,2000就会很明显。
总结
这篇文章主要浅说了opencv是什么,干什么用的,以及一些图像的基本处理。博主应该会短时间速成OpenCV,有兴趣的小伙伴可以关注以下。😂
















