【唐宇迪】OpenCV图像处理框架实战——笔记
本文介绍了图像处理的基本操作与技术要点。首先阐述了灰度图像和RGB彩色图像的像素表示方式,说明了waitKey()函数的作用及参数含义。在图像处理技术方面,详细讲解了ROI区域截取、数值加法运算差异(numpy取余计算与cv2的255上限处理)、阈值处理、平滑滤波等基础操作。接着介绍了图像形态学操作、梯度运算、边缘检测等进阶技术,并解释了图像金字塔和轮廓检测的应用。最后以信用卡数字识别为实战案例,
图像基本操作
思考1:像素点和矩阵值的对应关系,一个像素点中对应一个矩阵有n个值?
对于灰度图像,一个像素点 仅由一个数值表示,这个值代表该点的亮度或灰度。
对于彩色图像,通常情况下图像中一个像素点由多个数值(通道)组合而成,共同描述该点的颜色,如RGB格式图像。
RGB格式图像每个像素点由红、绿、蓝三个值组成,图像是三个二维矩阵的叠加,这三个矩阵分别对应R、G、B通道。

waitKey()表示图像显示的时间,参数为0表示任意键终止(如按空格、Enter等任意键),参数不为0时表示图像显示指定时间后关闭(如1000表示显示1s后关闭);



ret表示的是什么意思?
ret是return的缩写,本质是一个布尔值(True/False),它用来标识:是否成功从视频 / 摄像头中读取到一帧图像。
cv2.waitKey(100)&0xFF == 27怎么去理解这段代码?
27表示的是退出键,100是每一帧之后的等待时间,这句话大概意思是每一帧100ms等待时间(对应视频速度放慢),然后按退出键可以退出视频;
ROI感兴趣区域截取





numpy的数值加法计算,如img_cat+img_cat2加完之后的结果相当于%256取余,得到38,46等等;
cv2中的数值加法计算,相当于加完最大保留到255数值,而不是取余再计算得到结果;



阈值与平滑处理





图像形态学操作

图像梯度运算

边缘检测

图像金字塔与轮廓检测

直方图均衡化与傅里叶变换


傅里叶变换思想:当我们在图像中进行处理的过程中,希望速度或效率更简单高效一些,通常先把图像映射到频域空间中,在频域做一些处理比在原始图像中做处理容易得多;
低通滤波器、高通滤波器;







项目实战——信用卡识别
如果要用模板匹配的识别方法,需要先找出一个跟当前要做的事非常接近的一个模板;
信用卡识别步骤(基于模板匹配的识别方法):
①对模板中的数字以及输入图像进行轮廓检测,选择轮廓检测完的外轮廓(轮廓检测前要进行图像灰度化、二值化、滤波等预处理操作);
②获取到当前模板中所有轮廓对应的外接矩形;
③将模板和输入图像进行模板匹配,识别信用卡数字;(匹配过程中由于数字轮廓对应的大小size不一样,需要先进行Resize操作转换成相同的大小size)

信用卡识别实战:









Otsu方法是一种自动确定图像阈值的算法,它可以根据图像的灰度分布自适应地选择最佳阈值。




提取到的轮廓往外扩,保证轮廓区域够大容易检测到数字;
要做模板匹配,所以这里Resize大小要跟模板做的大小一样;





项目实战——文档扫描OCR识别



使用OCR开源工具包进行光学字符识别,识别出中英文或数字结果;
图像预处理:
轮廓检测:
cv2.approxPolyDP 是一个强大的工具,可以简化和近似多边形形状,为后续的图像处理任务提供更有效的表示形式。
其中0.02*peri是对应的epsilon参数,这个参数控制了近似的精度,epsilon 越小,近似的多边形越接近原始曲线,保留的点数也越多;epsilon 越大,逼近的多边形越简单(点数越少)。


透视变换:





tesseract开源OCR识别工具包的使用

tesseract全局变量找不到的问题避坑:



图像特征——Harris

基本原理:




图像特征——sift






案例实战-全景图像拼接








当我们对图像进行图像拼接或对图像进行投影变换、角度变换的过程中,最少需要有4对特征点;
通过机器学习算法和loss function回归,比如通过随机抽样一致算法(RANSAC)找到最适合4对特征点:



图像拼接的流程:①求变换矩阵(把图像进行旋转、内凹、拉伸等操作);②对两张图像经过SIFT特征提取、H矩阵变换、特征匹配后,求得拼接后的图像结果;
拼接完成的最终结果:
整体流程解读:
SIFT特征提取部分:
关键点匹配部分:
图像拼接函数部分1:
RANSAC算法匹配+H矩阵计算返回
图像拼接函数部分2:
图像拼接函数部分3:
图像拼接函数部分4:
主函数:
项目实战——答题卡识别判卷
整体流程与效果
预处理操作函数部分1:图像灰度化——高斯滤波(去除噪音)——Canny算子边缘检测
预处理操作函数部分2:透视变换——Otsus阈值处理——遍历排序




可能会出现实际涂卡超出圆圈外,这是用霍夫变换检测圆圈效果不好






更多推荐



所有评论(0)