1 认识计算机视觉
2012年AlexNet模型在ImageNet图像分类中获得比赛冠军,深度学习开始在计算机视觉领域流行。早期的计算机视觉主要集中在重建方面,2012年以后在感知和重建两个领域都受到了深度学习的影响。应用场景包括自动驾驶、机器视觉、安防监控、其他行业等等。
计算机视觉的框架主要包含matlab、Matrox mil、Halcon、VisionPro、opencv,只有opencv是开源的。随着深度学习的发展又加入了tensorflow、pytorch、paddlepaddle+openvino、tensorRT、onnxruntime等。主流的开发语言是C++和python。
opencv支持c/c++/python/java/js等主流语言。应用与多个领域。opencv应用了TBB、PPL、SSE、CUDA、UI指令集等多种加速技术,支持Windows、Linux、Mac OS系统。对于python语言开发,可以通过pip install opencv-python
进行安装,也可以使用镜像源进行安装pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
。
2 读取与显示图像
图像可以分为灰度图和彩色图,灰度图只有黑白两种颜色,由
0
−
255
0-255
0−255之间的数值表示颜色深浅;彩色图像包含了BGR三种颜色通道,每个通道由
0
−
255
0-255
0−255之间的数值大小表示。
实际黑白图像:
计算机的理解:
[[163 162 161 … 170 154 130]
[162 162 162 … 170 155 126]
…
[42 44 57 … 102 106 109]]
实际彩色图像
计算机的理解:
[[[128 138 225] … [55 21 82]]
[[127 137 224] … [54 20 81]]
…
[[128 138 225] … [84 74 188]]]
由包含三个数的三维通道分别表示BGR
读取和显示图像也很简单
-
imread(filname[, flags])
函数读取图像:filename
是图像的名字image = cv.imread("lena.jpg")
-
imshow(winname, mat)
函数显示图像:winname
是显示窗口名字,mat
是读取的图像数组。cv.imshow("lena", image)
-
cv.waitKey(0)
表示一直等待直到任意一个键盘操作,才关闭图像,或者可以加等待的时间,单位是毫秒。否则显示图像一闪而过。cv.waitKey(0)
全部代码显示为
image = cv.imread("lena.jpg") # 读取图像,图像名
cv.imshow("lena", image) # 显示图像,窗口名,图像名
cv.waitKey(0) # 一直等待,等待时间(i(>0)毫秒),0一直等待
cv.destroyaAllWindows() # 删除所有窗口
cv.imerite("lena.png", image) # 写入图像
-
读取图像:
cv.imread(文件名[, 参数])
可以加入读入图像类型的参数:- 图像不可变:
cv.IMREAD_UNCHANGED
- 灰度图像:
cv.IMREAD_GRAYSCALE
- 彩色图像:
cv.IMREAD_COLOR
- 图像通道BGR转成RGB:
cv.IMREAD_BGR2RGB
- 图像不可变:
-
显示图像:
cv.imshow(窗口名,图像名)
-
窗口等待时间:
cv.waitKey(n)
,等待n(n>0)毫秒;等于0则一直等待,直到键盘输入;参数<0表示等待键盘单击。 -
删除窗口:
cv.destroyaAllWindows()
删除所有窗口,cv.destroyaWindows()
删除当前窗口 -
写入图像:
cv.imwrite(文件地址,图像名)
【参考】
DataWhale OpenCV课程