OpenCV—python 发票印章去除或分割(图像内容识别预处理)

article/2025/6/23 22:24:42

前言

在做发票内容识别时,发现发票的印章遮挡住文字信息,尤其在合计金额处,导致这一处的信息提取出问题,于是想到去除发票印章。

思路一:通过颜色通道获取所需信息图

(代码主要是参考 http://www.deanhan.com/2018/06/15/channel/)

  • 读取原始图像A
  • 提取图像的红色通道,得到红色通道灰度值图片B
  • 计算B的统计直方图C,确定最佳的阈值threshold
  • 根据阈值,对B进行二值化,得到最终图片D
  • (可选)应用膨胀算子对D进行操作,得到图片E
#去除印章
import cv2
import numpy as np
import matplotlib.pyplot as pltimage0=cv2.imread("fapiao.png",cv2.IMREAD_COLOR)   # 以BGR色彩读取图片
image = cv2.resize(image0,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_CUBIC)  # 缩小图片0.5倍(图片太大了)
cols,rows,_=image.shape                            # 获取图片高宽
B_channel,G_channel,R_channel=cv2.split(image)     # 注意cv2.split()返回通道顺序cv2.imshow('Blue channel',B_channel)
cv2.imshow('Green channel',G_channel)
cv2.imshow('Red channel',R_channel)pixelSequence=R_channel.reshape([rows*cols,])     # 红色通道的histgram 变换成一维向量
numberBins=256                                    # 统计直方图的组数
plt.figure()                                      # 计算直方图
manager = plt.get_current_fig_manager()
histogram,bins,patch=plt.hist(pixelSequence,numberBins,facecolor='black',histtype='bar')     # facecolor设置为黑色
#设置坐标范围
y_maxValue=np.max(histogram)
plt.axis([0,255,0,y_maxValue])
#设置坐标轴
plt.xlabel("gray Level",fontsize=20)
plt.ylabel('number of pixels',fontsize=20)
plt.title("Histgram of red channel", fontsize=25)
plt.xticks(range(0,255,10))
#显示直方图
plt.pause(0.05)
plt.savefig("histgram.png",dpi=260,bbox_inches="tight")
plt.show()#红色通道阈值(调节好函数阈值为160时效果最好,太大一片白,太小干扰点太多)
_,RedThresh = cv2.threshold(R_channel,160,255,cv2.THRESH_BINARY)#膨胀操作(可以省略)
element = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3)) 
erode = cv2.erode(RedThresh, element)#显示效果
cv2.imshow('original color image',image)
cv2.imshow("RedThresh",RedThresh)
cv2.imshow("erode",erode)# 保存图像
cv2.imwrite('scale_image.jpg',image)
cv2.imwrite('RedThresh.jpg',RedThresh)
cv2.imwrite("erode.jpg",erode)cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

思路二:通过HSV颜色空间先提取印章,再获取所需信息

关于颜色空间查看:https://blog.csdn.net/wsp_1138886114/article/details/80660014

---------------------提取印章---------------------
import cv2
import numpy as npnp.set_printoptions(threshold=np.inf)
image=cv2.imread("fapiao.png")hue_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
low_range = np.array([150, 103, 100])
high_range = np.array([180, 255, 255])
th = cv2.inRange(hue_image, low_range, high_range)
index1 = th == 255img = np.zeros(image.shape, np.uint8)
img[:, :] = (255,255,255)
img[index1] = image[index1]#(0,0,255)
cv2.imshow('original_img', image)
cv2.imshow('extract_img', img)

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Y8I8E1Q5.shtml

相关文章

【图像处理通道分离去除印章】

如下图所示&#xff0c;想要取出图像上的红色印记&#xff0c;我们可以采用通道分离的方法&#xff0c;具体如下&#xff1a; #include<opencv2\opencv.hpp> #include<string> #include <vector>using namespace cv; using namespace std;int main() {Mat sr…

C++OpenCV去除发票中红色的印章部分实战

1.背景 最近一个客户要求去除发票中的红色印章部分: 就是票据上往往会有一些红色印章把一些重要信息区域给覆盖了,比如一些开发票人员盖印章时比较随意,容易吧一些关键区域给遮蔽了,这让接下来的票据识别很困难,因此,我们必须先对票据图像进行一定的预处理来移除印章干扰…

opencv去除印章痕迹

今天看到一个很有意思的程序&#xff0c;就是去除票据上的红色印章&#xff0c;觉得很有意思&#xff0c;就把它抄过来记录一下&#xff0c;同时自己也开了一下脑洞。 原来的程序来自&#xff1a;https://www.cnblogs.com/skyfsm/p/7638301.html 可以看到图像效果很不错&#…

Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章&#xff0c;在网上查找了大量的大佬写过的方法&#xff0c;发现大多数是采取颜色通道分离法来做&#xff0c;并且效果还不错。站在前人的肩膀上&#xff0c;我又做了些许调整&#xff0c;谈不上是改进&#xff0c;但是能应…

OCR图片预处理之去除印章(一)

导读 在做OCR票据类识别的时候经常会遇到一些票据上会有印章&#xff0c;而对于的文字检测和文字识别模型而言&#xff0c;印章的存在一定会影响模型识别的准确率&#xff0c;所以通常我们都是先将图片去除印章之后&#xff0c;再将图片送入到文字检测和文字识别模型中。 本篇…

CSS垂直居中的几种方法

目录 1.设置行高line-height 2.内边距法&#xff08;padding&#xff09; 3.模拟表格法 4.绝对定位 5.使用flex布局 1.设置行高line-height 如果要垂直居中的只有一行或几个文字&#xff0c;那它的制作最为简单&#xff0c;只要让文字的行高和容器的高度相同即可 div {hei…

CSS中垂直居中的七种方法

前言&#xff1a; 我们在编辑一个版面&#xff0c;通常都会用到水平居中和垂直居中来设计&#xff0c;而水平居中很好处理&#xff0c;不外乎就是设定margin:0 auto&#xff1b;或是text-align:center&#xff1b;&#xff0c;就可以轻松解决掉水平居中的问题&#xff0c;但一…

CSS文本垂直居中的几种方法

观看更佳-点击前往 一、单行文本的居中 1.文字水平居中 <div classbox style"text-align: center;">hello world</div>2.文本垂直水平居中 <div class"box2" style"width:150px;height:100px;line-height: 100px;">文本垂直…

css如何设置文本垂直居中显示,css中怎么设置文本居中?css文本垂直居中的设置方法...

在网页设计的过程中&#xff0c;有时候可能为了布局美观可能需要让文本居中&#xff0c;那么&#xff0c;怎么设置文本居中呢&#xff1f;本篇文章将给大家介绍关于css设置文本垂直居中的方法。 首先我们要知道通过css实现元素的水平居中较为简单&#xff1a;对文本&#xff0c…

css表格怎么垂直居中对齐,css表格垂直居中怎么设置?

css设置表格垂直居中的方法&#xff1a;1、在表格外面嵌套一层table&#xff0c;用table中的td来控制居中。2、将表格放在div标签中&#xff0c;通过为div设置css样式display:table-cell实现垂直居中。 css设置表格垂直居中的方法&#xff1a;1、在表格外面嵌套一层table&#…

竖排文字垂直居中css样式

竖排文字垂直居中css样式 <div class"item"><p class"bgcolor-green">A0001</p><p class"bgcolor-yellow">A0002</p><p class"bgcolor-red">A0003</p><p class"bgcolor-green"…

CSS实现水平垂直居中的五种方法

前言 今天来看看一个之前困扰我很久的问题&#xff0c;在CSS中&#xff0c;水平垂直居中&#xff0c;能有几种写法。 方法一&#xff1a;margin:auto 子绝父相&#xff0c;当元素绝对定位的时候&#xff0c;会根据最近父元素进行定位&#xff0c;利用这个特性&#xff0c;我…

CSS 元素垂直居中的 6种方法

转自&#xff1a;http://blog.zhourunsheng.com/2012/03/css-%E5%85%83%E7%B4%A0%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD%E7%9A%84-6%E7%A7%8D%E6%96%B9%E6%B3%95/ 利用CSS进行元素的水平居中&#xff0c;比较简单&#xff0c;行级元素设置其父元素的text-align center&#xff…

使用 CSS 实现垂直居中的8种方法

​​​​​​CSS垂直居中的8种方法 目录 ​​​​​​CSS垂直居中的8种方法 1、通过vertical-align:middle实现CSS垂直居中。 2、通过display:flex实现CSS垂直居中。 3、通过伪元素:before实现CSS垂直居中。 4、通过display:table-cell实现CSS垂直居中。 5、通过隐藏节点…

css垂直居中的6种方式

在线demo演示地址&#xff1a;https://rondsjinhuajin.github.io/demo/index.html 个人博客主页&#xff1a;KinHKin的博客_CSDN博客-vue,中秋活动,性能优化领域博主 使用人群&#xff1a;前端面试&#xff0c;日常开发小技巧 目录 1、效果演示如下 ​编辑 1、使用display:…

css 居中问题的总结

1.css让浮动的盒子水平居中 解决方法&#xff1a; 给浮动的盒子加一个父盒子&#xff0c;设置宽度跟浮动盒子一样大小&#xff0c;并且overflow:hidden; 设置该盒子为margin: 0 auto; <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

CSS实现垂直居中的十五种方法

情景一&#xff1a;单行文字垂直居中 1、line-height 原理是在于将单行文字的行高设定后&#xff0c;文字会位于行高的垂直中间位置 <div class"text-con">单行文字垂直居中</div><style>.text-con {width: 200px;height: 60px;line-height: 60px…

CSS垂直居中的10种实现姿势

前言 前端开发中元素居中是最常见和最经常使用到的css技巧&#xff0c;不仅开发中经常会用到&#xff0c;面试官出题考核基础时有时候也会问道这类问题。本文主要介绍10种垂直居中的方法。希望对你我都有帮组。 1、line-heightheight实现 如果子元素是行内文本元素的话&…

CSS 垂直居中的七种方法——史上最详细总结

博主目前在蚂蚁集团-体验技术部&#xff0c;AntV/S2 是博主所在团队的开源项目——多维交叉分析表格&#xff0c;欢迎使用&#xff0c;感谢到 S2 github 仓库点赞 star&#xff0c;有任何关于前端面试、就业、技术问题都可给在文章后留言。 我们在写页面时&#xff0c;通常会用…

严题集6.65//Leetcode105 已知二叉树前序序列和中序序列分别存放在两个一位数组中,建立该二叉树的二叉链表

一、问题描述 注意可以假设数组中没有重复元素&#xff0c;这位我们判断子树是否为空时提供了便利。 二、DVC版本 先是在DVEC上编译的&#xff0c;供读者参考。 后面有LeetCode版的。 BiTree Resume_BiTree(TElemType *pre,TElemType *mid,int prelen,int midlen) //6-65 前…