opencv 直线检测 HoughLines HoughLinesP

cpp 复制代码
#include "iostream"
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

void drawline(Mat img, vector<Vec2f> lines, double rows, double cols,Scalar scalar)
{
	Point p1, p2;
	for (int i = 0; i < lines.size(); i++)
	{
		float jl = lines[i][0];
		float jd = lines[i][1];
		double a = cos(jd);
		double b = sin(jd);

		double x0 = jl * a;
		double y0 = jl * b;

		double len = max(rows, cols);
		p1.x = cvRound(x0 + len * (-b));
		p1.y = cvRound(y0 + len * a);

		p2.x = cvRound(x0 - len * (-b));
		p2.y = cvRound(y0 - len * a);

		line(img, p1, p2, scalar);
	}
}

int main()
{
	Mat  img,smallimg,gray, edge,gau, smallimg1, smallimg2, smallimg3, smallimg4;

	img = imread("shubiaodian.jpg");

	resize(img, smallimg, Size(0, 0), 0.1, 0.1);

	smallimg.copyTo(smallimg1);
	smallimg.copyTo(smallimg2);
	smallimg.copyTo(smallimg3);
	smallimg.copyTo(smallimg4);
	cvtColor(smallimg, gray, COLOR_BGR2GRAY);
	GaussianBlur(gray, gau, Size(3, 3), 5, 5);

	Canny(gau, edge, 150, 255);

	vector<Vec2f> lines1;
	vector<Vec2f> lines2;

	HoughLines(edge, lines1, 1, CV_PI * 2 / 180, 30);
	HoughLines(edge, lines2, 1, CV_PI * 2 / 180, 80);

	drawline(smallimg1, lines1, edge.rows, edge.cols, Scalar(0, 0, 255));
	drawline(smallimg2, lines2, edge.rows, edge.cols, Scalar(0, 0, 255));

	vector<Vec4i> lines3;
	vector<Vec4i> lines4;

	HoughLinesP(edge, lines3, 1, CV_PI / 180, 30, 0, 10);
	HoughLinesP(edge, lines4, 2, CV_PI / 180, 60, 150, 80);

	cout << "lines1:" << lines1.size() << endl;
	cout << "lines2:" << lines2.size() << endl;
	cout << "lines3:" << lines3.size() << endl;
	cout << "lines4:" << lines4.size() << endl;
	for (int i = 0; i < lines3.size(); i++)
	{
		line(smallimg3, Point(lines3[i][0], lines3[i][1]), Point(lines3[i][2], lines3[i][3]), Scalar(0,0,255));
	}
	for (int i = 0; i < lines4.size(); i++)
	{
		line(smallimg4, Point(lines4[i][0], lines4[i][1]), Point(lines4[i][2], lines4[i][3]), Scalar(0,0,255));
	}

	imshow("smallimg", smallimg);
	imshow("canny", edge);
	imshow("smallimg1", smallimg1);
	imshow("smallimg2", smallimg2);
	imshow("smallimg3", smallimg3);
	imshow("smallimg4", smallimg4);

	waitKey(0);

	return 1;
}
相关推荐
Coder_Boy_7 小时前
DDD从0到企业级:迭代式学习 (共17章)之 四
java·人工智能·驱动开发·学习
木头左8 小时前
LSTM量化交易策略中时间序列预测的关键输入参数分析与Python实现
人工智能·python·lstm
king王一帅8 小时前
流式渲染 Incremark、ant-design-x markdown、streammarkdown-vue 全流程方案对比
前端·javascript·人工智能
AI营销实验室8 小时前
AI CRM系统推荐,原圈科技赋能地产销售
人工智能·科技
cskywit8 小时前
MobileMamba中的小波分析
人工智能·深度学习
ws2019078 小时前
智行未来,科技驱动:AUTO TECH China 2026广州展将于11月27日举办!
人工智能·科技·汽车
HyperAI超神经8 小时前
【vLLM 学习】Prithvi Geospatial Mae
人工智能·python·深度学习·学习·大语言模型·gpu·vllm
赫凯8 小时前
【强化学习】第一章 强化学习初探
人工智能·python·强化学习
百锦再8 小时前
AI赋能智慧客服与人工客服融合系统企业级方案
人工智能·ai·aigc·模型·自然语言·赋能·只能
"YOUDIG"9 小时前
AI智能匹配:一站式电脑配置推荐平台——科学原理与个性化服务解析
人工智能