OpenCV亚像素角点检测

本文分享了在围棋盘四个角点检测中,亚像素角点检测方法的应用实践。通过详细解析代码,展示了如何将彩色图像转换为灰度图,并运用OpenCV库中的goodFeaturesToTrack和cornerSubPix函数实现角点的检测与定位,最终绘制并输出检测结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我在做围棋盘的的四个角点检测时,试了几种角点检测,用来得到棋盘四个角的初始点,试了几种角点检测的方法,但在我所使用的环境下,亚像素的角点检测得到的结果比较理想。

代码

//亚像素角点检测
void cornerDetectorPixel(Mat &src, Mat &dst)
{
	Mat src_img, gray;

	//读取图像
	src_img = src.clone();

	//把原图像转换成灰度图
	cvtColor(src_img, gray, COLOR_BGR2GRAY);

	vector<Point2f> corners;
	
	dst = src_img.clone();
	//进行角点检测
	goodFeaturesToTrack(gray, corners, 4, 0.01, 10, Mat(), 3, false, 0.04);

	//输出检测到的角点的数量
	cout << "输出检测到的角点的数量: " << corners.size() << endl;
	
	//参数设置
	Size winSize = Size(5, 5);
	Size zeroZone = Size(-1, -1);

	TermCriteria criteria = TermCriteria(TermCriteria::EPS + TermCriteria::MAX_ITER, 40, 0.001);
	//计算亚像素级角点位置
	cornerSubPix(gray, corners, winSize, zeroZone, criteria);
	//输出精准角点坐标信息
	for (int i = 0; i < corners.size(); i++)
	{
		cout << "[" << i << "]" << "号角点坐标:" << "(" << corners[i].x << ", " << corners[i].y << ")" << endl;
	}

	//绘制出被检测的角点
	for (size_t i = 0; i < corners.size(); i++)
	{
		circle(dst, corners[i], 6, Scalar(0, 0, 255), -2, 8, 0);
	}
	imshow("dst", dst);
}

运行结果:
在这里插入图片描述
还是有角点没有检测到,要使用可以自己试着优化下参数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值