opencv字符预处理去掉背景

一. 我们经常要在图像上处理字符背景,将字符分割出来。如下图:

将hello 分离出来。

具体步骤:

1. 灰度转换,将原图转换成单通道的灰度图。

   API:cvtColor(src, gray_src, CV_BGR2GRAY);

2. 二值化处理, 这一步使用阈值分割

adaptiveThreshold(~gray_src, binary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);

采用自适应阈值API。ADAPTIVE_THRESH_MEAN_C 均值方式,另外有高斯方式,感兴趣的可用试试。

3. 形态学操作,去除字符上的杂点和线条

采用开操作。开操作的实质就是先腐蚀再膨胀。

Mat kernel = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1,-1));

morphologyEx(binary,dst, MORPH_OPEN, kernel, Point(-1,-1),1,0);

 

二. 源代码如下:

#include "stdafx.h"
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
	Mat gray_src, binary, dst;
	Mat src = imread("C:/Users/kenny/Pictures/Saved Pictures/hello.jpg");
	if(src.empty())
	{
		return -1;
	}
	namedWindow("display", CV_WINDOW_AUTOSIZE);
	imshow("src image", src);

	// 转为灰度图
	cvtColor(src, gray_src, CV_BGR2GRAY);
	imshow("gray image",gray_src);

	//blur(gray_src, gray_src, Size(3,3), Point(-1,-1));
	
	// 二值化处理
	adaptiveThreshold(~gray_src, binary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
    imshow("binary image", binary);

	// 形态学操作 开操作,先腐蚀再膨胀, 提取字母
	Mat temp;
	Mat kernel = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1,-1));
// 	erode(binary, temp, kernel, Point(-1,-1), 1);
// 	dilate(temp, dst, kernel, Point(-1,-1), 1);

	morphologyEx(binary,dst, MORPH_OPEN, kernel, Point(-1,-1),1,0); // 如去掉字母的话,使用顶帽操作,顶帽是原图减去开操作图的差值
	imshow("dst image", dst);


	waitKey(0);

	return 0;
}

 

运行结果:

灰度图:

二值图:

形态学后结果图:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值