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;
}
相关推荐
xexpertS6 分钟前
不稳定测试治理:如何通过自动检测与自动抑制提升 CI 稳定性
人工智能·自动化
小程故事多_807 分钟前
Graph Engineering,重构AI智能体协作的底层逻辑,让复杂任务高效落地
人工智能·重构
宸津-代码粉碎机9 分钟前
Jar热部署进阶实战|修复原生方案OOM与类冲突问题,生产级无BUG优化方案
java·大数据·服务器·开发语言·前端·人工智能·python
咖啡星人k18 分钟前
AI 编程工具集体变脸:Cursor 漏洞、TRAE 限额、Claude Code 数据收集风波
人工智能·安全·microsoft·cursor·trae·ai编程工具
凡人AI录1 小时前
GPT-5.6 正式发布:Codex 并入 ChatGPT,额度与模型体系全面调整
人工智能·gpt·chatgpt
墨舟的AI笔记1 小时前
组件级响应式的破局:CSS 容器查询的工程落地与取舍
人工智能
Molesidy1 小时前
【AI】【ChatGPT】【Codex】codex桌面版的插件(MCP)和技能(skills)的安装和应用
人工智能·codex·ai agent
工业设备方案笔记1 小时前
AI大模型为什么开始跑到边缘设备上?——本地大模型部署正在成为新的行业趋势
人工智能
未知违规用户2 小时前
大模型项目:RAG项目实战与FlagEmbedding模型
人工智能·windows·python·深度学习
蓝狐社2 小时前
宁德时代不是电池厂,是下棋的
人工智能