1. 实现方法

现实生活中,一些票据(比如发票、车票)等都会有一个红色印章,有时会盖在某个关键区域,影响了其他的字符识别。因此,为了提高准确率,我们尽量会移除红色印章,具体实现方法如下:

  • 对彩色图分离通道,拿到红色通道图
  • 进行阈值分割

2. 代码实现

int main()
{
	char* path = "C:\\Users\\Administrator\\Desktop\\piaoju.png";
	Mat src = imread(path);
	if (src.empty()) {
		return -1;
	}
	imshow("original", src);
	Mat gray;
	cvtColor(src, gray, CV_BGR2GRAY);

	//全局二值化
	int thresh_value = 100;
	Mat binary;
	threshold(gray, binary, thresh_value, 255, CV_THRESH_BINARY);
	imshow("binary", binary);

	vector<Mat> channes;
	split(src, channes);
	Mat red = channes[2];
	imshow("red", red);

	Mat red_binary;
	threshold(red, red_binary, thresh_value, 255, CV_THRESH_BINARY);
	imshow("red+binary", red_binary);

	Mat red_dilate;
	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
	dilate(red_binary, red_dilate, kernel);
	Mat kernel_ellipse = getStructuringElement(MORPH_ELLIPSE, Size(2, 2), Point(-1, -1));
	morphologyEx(red_binary, red_dilate, MORPH_OPEN, kernel_ellipse, Point(-1, -1));
	imshow("red+binary+dilate", red_dilate);

	waitKey();
	return 0;
}

3. 结果展示

在这里插入图片描述

注意
作者注释掉了最后的腐蚀和开运算,估计是因为效果不明显,我也对核的大小进行了调整测试,相对red_binary只是稍微清晰了一些。

原文地址:https://www.freesion.com/article/6510242781/

GitHub 加速计划 / opencv31 / opencv
77.38 K
55.71 K
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:2 个月前 )
c3747a68 Added Universal Windows Package build to CI. 7 天前
9b635da5 - 7 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐