图像处理基础
一、OpenCV重要功能及模块介绍
1、内置数据结构和输入/输出
- OpenCV内置了丰富的与图像处理有关的数据结构,如Image、Point、Rectangle等。
- core模块实现了各种基本的数据结构。
- imgcodecs模块提供了图像文件的读写功能,用户使用简单的命令即可读写图像文件。
2、图像处理操作
imgproc模块提供了图像处理操作,如图像过滤、几何图像变换、画图、色彩空间转换、直方图等。
3、图形用户界面操作
highgui模块提供了图像的图形窗口操作功能,如创建窗口显示图像或者视频、令窗口响应键盘和鼠标事件、操作窗口中图像的某个地区等。
4、视频分析
video模块提供了视频分析功能,如分析视频中连续帧之间的运动、跟踪视频中的目标。videostab模块提供了视频稳固处理功能,可解决拍摄视频时的抖动题目。optflow模块提供了与光流操作相干的算法。
5、3D重建
calib3d模块提供了3D重立功能,可根据2D图像创建3D场景。
6、特性提取
features2d模块提供了特性提取功能,可以从2D图像中检测和提取对象的特性。
7、对象检测
objdetect和xobjdetect模块提供了对象检测功能,可在图像中检测给定图像的位置。
8、机器学习
ml模块提供了机器学习功能,包罗了多种机器学习算法,如k近邻(k-Nearest Neighbors,kNN)、k均值聚类(k-Means Clustering)、支持向量机(Support Vector Machines,SVM)、神经网络(Neural Network)等。机器学习算法广泛应用于目标辨认、图像分类、人脸检测、视觉搜索等。
9、深度学习
深度神经网络(Deep Neural Network,DNN)模块提供了深度学习功能。深度学习是机器学习中近几年来快速发展的一个子范畴,广泛应用于语音辨认、图像辨认、天然语言处理、图像修复、人脸辨认等。OpenCV的深度学习支持Caffe、TensorFlow、Torch、Darknet等著名的深度学习框架。
10、盘算摄影
盘算摄影通过图像处理技术来改善相机拍摄的图像,如高动态范围成像、全景图像、图像补光等。photo和xphoto模块提供了与盘算摄影有关的算法,stitching模块提供了全景图像算法。
11、形态分析
shape模块提供了形态分析功能,可以辨认图像中对象的形状、分析形状之间的相似性、转换对象形状等。
12、人脸检测和辨认
OpenCV已在face模块中实现了人脸检测、人脸特性检测和人脸辨认功能。人脸检测属于对象检测,用于找出图像中人脸的位置和尺寸。人脸特性检测属于特性检测,用于找出图像中人脸的重要特性。人脸辨认属于对象辨认,包罗从已知人脸聚集中找出与未知人脸最匹配的人脸,以及验证给定人脸是否为某个已知人脸。OpenCV实现了基于Haar级联分类器和基于深度学习的人脸检测算法,以及EigenFaces、FisherFaces和局部二进制编码直方图(Local Binary Patterns Histograms,LBPH)等人脸辨认算法。
13、表面匹配
surface_matching模块提供了3D对象辨认算法和3D特性的姿态估盘算法,用于根据图像的深度和强度信息辨认3D对象。
14、文本检测和辨认
text模块提供了文本检测和辨认功能,用于辨认和检测图像中的文本,实现车牌辨认、道路标记辨认、内容数字化等相干应用。
二、图像基本操作
读取图像:cv.imread()
- import numpy as np
- import cv2 as cv
- #加载彩色灰度图像
- img = cv.imread('messi5.jpg',0)
复制代码 显示图像:cv.imshow()
- cv.imshow('image',img)
- cv.waitKey(0)
- cv.destroyAllWindows()
复制代码 写入图像:cv.imwrite()
- import cv2
- import numpy
- img=numpy.zeros((50,50),dtype=numpy.uint8) #创建大小为50×50的黑色正方形图像
- cv2.imwrite('messigray.jpg',img)
复制代码思索题:如果我们想以灰度模式加载图像,显示图像,按s键可以保存图像并退出,或者按ESC键直接退出不保存,设计出代码。
- import numpy as np
- import cv2 as cv
- img = cv.imread('cat.jpg',0) #或者把0改成cv.IMREAD_GRAYSCALE
- cv.imshow('cat.jpg',img)
- k=cv.waitKey(0)
- if k==27:
- cv.destroyAllWindows()
- elif k==ord('s'):
- cv.imwrite('catgray.png',img)
- cv.destroyAllWindows()
复制代码
其中留意:
- 判定 ESC 键(ASCII码27):
如果按下的是 ESC 键(对应的ASCII码是27),程序会调用 cv.destroyAllWindows() 关闭所有打开的窗口,不保存图像。
- 判定 s 键:
如果按下的是字母 s 键(ord('s') 用来获取字符 s 的 ASCII 码),程序会实行两步:
- 使用 cv.imwrite('catgray.png', img) 将当前图像保存为名为 'catgray.png' 的文件。
- 然后调用 cv.destroyAllWindows() 关闭所有窗口。
三、视频读取-摄像头读取
(1)将视频文件或者摄像头作为数据源来创建VideoCapture对象。
(2)调用VideoCapture对象的read()方法获取视频中的帧,每一帧都是一幅图像。
(3)调用VideoWriter对象的write()方法将帧写入视频文件,或者调用cv2.imshow()函数在窗口中显示帧(即播放视频)。
- import numpy as np
- import cv2 as cv
- cap = cv.VideoCapture(0)
- fourcc = cv.VideoWriter_fourcc(*'XVID')
- out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
- if not cap.isOpened():
- print("Cannot open camera")
- exit()
- while True:
- # 逐帧捕获
- ret, frame = cap.read()
- # 如果正确读取帧,ret为True
- if not ret:
- print("Can't receive frame (stream end?). Exiting ...")
- break
- frame = cv.flip(frame, 1)
- out.write(frame)
- # 我们在框架上的操作到这里
- gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
- # 显示结果帧e
- cv.imshow('frame', frame)
- if cv.waitKey(1) == ord('q'):
- break
- # 完成所有操作后,释放捕获器
- cap.release()
- out.release()
- cv.destroyAllWindows()
复制代码
- 通过摄像头及时捕获视频;
- 对每一帧举行水平镜像翻转;
- 将处理后的帧保存为视频文件,同时在屏幕上及时显示视频画面;
- 当用户按下 'q' 键时,停止视频捕获并开释所有资源。
像这样,还挺风趣的哈哈
后面可以结合图像辨认做更风趣的操作,学起来~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |