基于OpenCV文字特征提取

  对于车牌识别,或OCR文字识别时,需要先对图片进行预处理,去除干扰因素后再进行后续图像识别操作!

  图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。

 - 腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值

 - 膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值

 

(1)二值图像与灰度图像上的腐蚀操作原理

 

(2)二值图像与灰度图像上的膨胀操作原理

 

(3)结构元素,上述膨胀与腐蚀过程可以使用任意的结构元素(矩形、圆、直线)

 

 

 

操作步骤

(1)输入图像彩色图像 - imread()

(2)转换为灰度图像 – cvtColor()

(3)转换为二值图像 – adaptiveThreshold()

(4)定义结构元素 - getStructuringElement()

(5)开操作 (腐蚀+膨胀)提取 水平与垂直线

(6)后处理 - bitwise_not()

源代码

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main(int argc, char** argv)
{
	Mat src, dst;
	src = imread("C:/Desktop/omd_Opencv/ms/2018-05-09_161301.png");//输入彩色图像
	if (!src.data){
		printf("could not load image...\n");
		return -1;
	}
	
	char INPUT_WIN[] = "input image";
	char OUTPUT_WIN[] = "result image";
	namedWindow(INPUT_WIN,CV_WINDOW_AUTOSIZE);
	imshow(INPUT_WIN,src);

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

	Mat binImg;
	adaptiveThreshold(~gray_src,binImg,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,15,-2);//转换为二值图像,~gray_src取反白底显示
	imshow("bin image",binImg);
	//矩形结构
	Mat kernel = getStructuringElement(MORPH_RECT, Size(2,2), Point(-1, -1));//注意:一般Size(x, y), x, y 必须是正数而且是奇数

	Mat temp;
	//开操作(先腐蚀后膨胀),目的:去掉细小的对象
	erode(binImg, temp, kernel);//形态学操作 - 腐蚀
	dilate(temp, dst, kernel);//形态学操作-膨胀
	bitwise_not(dst,dst);//做后处理,像素取反操作

	imshow("final Result",dst);

	waitKey(0);
	return 0;
}

 

运行结果

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值