1、概述
案例:识别考试卷中的填空的直线,并用红色线描述出来
实现步骤:
1.载入图像
2.转灰度图像
3.图像二值化
4.使用形态学开操作去除文本部分,只保留直线
5.使用形态学膨胀操作使保留的直线黏连
6.使用使用霍夫直线检测找到图中的直线
7.根据直线坐标绘制直线到原图上
8.输出最终图片
2、代码示例
//【1】载入原图
Mat src = imread(filePath);
if(src.empty()){
qDebug()<<"图片为空";
return;
}
imshow("src",src);
//【2】图像灰度化
Mat gray;
cvtColor(src,gray,COLOR_BGR2GRAY);
imshow("gray",gray);
//【3】图像二值化
threshold(gray,gray,0,255,THRESH_BINARY_INV|THRESH_OTSU);
imshow("threshold",gray);
//【4】使用开操作消除图中文字,只保留直线
Mat kernel = getStructuringElement(MORPH_RECT,Size(50,1),Point(-1,-1));
morphologyEx(gray,gray,MORPH_OPEN,kernel,Point(-1,-1),1);
imshow("morphologyEx_open",gray);
//【5】膨胀操作
kernel = getStructuringElement(MORPH_RECT,Size(3,3),Point(-1,-1));
dilate(gray,gray,kernel);
imshow("dilate",gray);
//【6】使用霍夫直线检测直线坐标
vector<Vec4f> lines;
HoughLinesP(gray,lines,1,CV_PI/180,10,30,1);
//【7】根据直线坐标绘制直线
for(size_t i=0;i<lines.size();i++){
Vec4f l = lines[i];
line(src,Point(l[0],l[1]),Point(l[2],l[3]),Scalar(0,0,255),3,LINE_4);
}
//【8】显示最终图像
imshow("resultImage",src);
3、图片演示
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓