4.通道分离split()与合成merge()以及去除票据上的印章

您所在的位置:网站首页 发票上的红色印章怎么去除 4.通道分离split()与合成merge()以及去除票据上的印章

4.通道分离split()与合成merge()以及去除票据上的印章

2023-07-18 08:49| 来源: 网络整理| 查看: 265

完成时间:2018-5-14

作者:小嗷

qq邮箱:[email protected]

qq群:736857977

公众号:小嗷的日常(扫码关注)

0.二维码

老是学习API函数,确实没意思。但是,编程几乎所有的初学者都是这么来的。然而,尽量结合实际,却发现每个细节都有意思。

在图像处理时,我们接触到的彩色以RGB居多,为了分析图像在某一通道上的特性,需要将图像的颜色通道进行分离,或者是在对某一颜色通道处理后重新进行融合。opencv提供了split()函数来进行颜色通道的分离,提供了merge()函数来进行颜色通道的融合。

1.split()函数

此函数的作用是将一个图像通道进行分离。

split()函数定义:

void split(const Mat& m, vector& mv );

参数说明:

const Mat&类型的src,填我们需要进行分离的图像; vector类型的mv,填函数的输出数组或者输出的vector容器,即分离后的图像; 2.merge()函数

merge()函数的功能是split()函数的逆向操作,将多个数组合并成一个多通道的数组。

merge()函数定义:

void merge(const vector& mv, OutputArray dst );

const 类型的mv,填需要被合并的vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度; 保存为合并后的图像; 3.利用split()函数和阈值化去除票据上的印章,merge()函数合并图像

票据上往往会有一些红色印章把一些重要信息区域给覆盖了,比如一些开发票人员盖印章时比较随意,容易吧一些关键区域给遮蔽了,这让接下来的票据识别很困难,因此,我们必须先对票据图像进行一定的预处理来移除印章干扰,再进行字符识别,这样子识别准确率才有保证。

任务:我们需要识别发票的字体(红色盖章影响都我们的识别工作)

如图:

1.发票原图.jpg 分析场景:这种发票只有章是红色,字体为黑色为主 怎么去除该种发票红色部分?利用split()分离红色通道浅化目标,再利用阈值把浅化目标,过滤掉。(阈值用来过滤比较浅的颜色【其中一种用法】) 2.通道图.PNG 第二张图为分离红色通道的图,明显比其他三张浅的(红色部分) 3.通道图阈值化.PNG 最后一张过滤掉红章图 代码如下 4.代码.PNG #include #include #include #include using namespace cv; using namespace std; int main() { //【1】定义相关变量 Mat srcImage, newImage; Mat srcImage_B, srcImage_G, srcImage_R; //【2】存放Mat的数组vector vector channels_BGR; //【3】读取原始图像并检查图像是否读取成功 srcImage = imread("D:\\1.发票原图.jpg"); if (srcImage.empty()) { cout


【本文地址】


今日新闻


推荐新闻


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