OpenCV将考试卷中的直线提取出来并标注直线
一、概述
案例:识别考试卷中的填空的直线,并用红色线描述出来
实现步骤:
1.载入图像
2.转灰度图像
3.图像二值化
4.使用形态学开操作去除文本部分,只保留直线
5.使用形态学膨胀操作使保留的直线黏连
6.使用使用霍夫直线检测找到图中的直线
7.根据直线坐标绘制直线到原图上
8.输出最终图片
二、代码示例
//【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);
三、图片演示