opencv 八 液晶屏数字提取

您所在的位置:网站首页 液晶屏上显示数字 opencv 八 液晶屏数字提取

opencv 八 液晶屏数字提取

2024-03-22 18:34| 来源: 网络整理| 查看: 265

一、算法需求

提取特定仪器液晶屏显示区域中的数字。 在这里插入图片描述

二、问题分析

在灰度图中,目标液晶屏显示区域为图中面积最大的连通域(将其表述为数字主体区域)。在二值化后发现,数字主体区域和周围区域存在一些白点和黑色连通域,需要设法去除这些干扰因素。在得到完好的数字主体区域后,可以使用数字主体区域与原图做与运算,得到原图中的数字区域,然后进行形态学优化即可。

三、基本实现步骤

1、读取图像为灰度图并进局部二值化 【imread(“filename”,0),0:灰度图模式】 2、进行开运算,把核心区域和周边区域断开 【若开运算达不到目的,则需要补充mask断开周边区域】 3、运用函数删除白色和黑色孔洞得到核心区域 【deleteMinWhiteArea 和deleteMinBlackArea 】 4、根据核心区域提取数字

四、实现过程 4.1 图像读取为二值图

使用imread(filepath,0)将图像读取为灰度图,然后使用adaptiveThreshold函数将图像进行局部二值化。局部二值化的特点是不需要设置二值化阈值,可根据局部特征进行二值化,但需要注意blockSize的设置(控制局部区域的大小)。

//读取图片为灰度图并进行二值化 Mat img = imread("D:\\Img_data\\Num\\test\\z1230.jpg",0); resize(img, img, { 512,512 }); imshow("01.灰度图", img); Mat bin_mat; int blockSize = 35; int constValue = 10; adaptiveThreshold(img, bin_mat, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, blockSize, constValue); imshow("02.二值图", bin_mat);

读取的灰度图如下所示: 在这里插入图片描述 二值化后的图像如下所示,可以看到其存在多个白色和黑色的区域及噪点: 在这里插入图片描述

4.2 去除干扰因素

在4.1中分析出二值图中存在多个多个白色和黑色的区域及噪点,需要设计算法去除这些干扰因素。对于白色噪点可以低通滤波器(中值滤波、均值滤波、高斯滤波等)或形态学算法(开运算或腐蚀)进行移除;对于面积较大的白色干扰因素可以使用连通域面积的方法进行移除;同时需要关注图像是否存在黑色的小连通域需要删除。

4.2.1 对二值图进行开运算

进行开运算,目的是使中间数字区域与周围连通域断开。

//进行开运算,目的是使中间数字区域与周围连通域断开 Mat open_mat; cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5)); morphologyEx(bin_mat, open_mat, MORPH_OPEN, element); imshow("03.开运算", open_mat);

开运算后的图像如下图所示: 在这里插入图片描述

4.2.2 删除白色和黑色干扰

由开运算效果图可以看出,在主体区域周围存在很多零散的白色孔洞及连通域,可以运用 deleteMinWhiteArea函数进行删除,需要注意的是该函数阈值需要根据图片尺寸(open_mat.size)具体设定。deleteMinWhiteArea函数参考自https://hpg123.blog.csdn.net/article/details/126864086

//删除白色干扰,主要是周围区域存在白色孔洞 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3