小案例-英语填空直线检测

#include<opencv2/opencv.hpp>                        
#include<iostream>
using namespace cv;
using namespace std;

Mat src,roiImage,dst;

void morhpologyLines(int, void*);
int main(int argc, char** argv)
{
	//读图像 灰度
	src = imread("C:/Users/lenovo/Desktop/open cv/案例/2.1.png",0);
	if (src.empty())
	{
		cout << "图片文件不存在";
		return -1;
	}
	namedWindow("1-原图", 1);
	imshow("1-原图", src);

	//去边,缩小区域  获取感兴趣区域
	Rect roi = Rect(10, 10, src.cols - 20, src.rows - 20);
	roiImage = src(roi);                               
	imshow("2-获取感兴趣区域", roiImage);

	//形态学操作
	morhpologyLines(0, 0);

	waitKey(0);
	return 0;
}
void morhpologyLines(int, void*)
{
	//二值化
	Mat binary;
	threshold(roiImage, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);  //二值取反加自动阈值
	imshow("3-二值化", binary);

	//开操作 去掉字母
	Mat kernel = getStructuringElement(MORPH_RECT, Size(35, 1), Point(-1, -1));  //获取结构元素,保留直线
	morphologyEx(binary, binary, MORPH_OPEN, kernel, Point(-1, -1));
	imshow("4-形态学开操作", binary);

	//膨胀操作 直线变粗
	kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));      
	dilate(binary, binary, kernel, Point(-1, -1));
	imshow("5-膨胀操作", binary);

	//霍夫直线绘制
	vector<Vec4i> lines;
	HoughLinesP(binary, lines, 1, CV_PI / 180.0, 30, 20.0, 0);
	Mat result;
	result = roiImage.clone();
	cvtColor(result, result, COLOR_GRAY2BGRA);
	for (size_t t = 0; t < lines.size(); t++)
	{
		Vec4i ln = lines[t];
		line(result, Point(ln[0], ln[1]), Point(ln[2], ln[3]), Scalar(0, 0, 255), 2, 8);
	}
	imshow("6-霍夫直线显示结果", result);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值