OpenCV亚像素角点检测

前言

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

代码

//亚像素角点检测
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);
}

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
亚像素角点检测是一种精细的角点检测方法,可以更准确地定位图像中的角点。OpenCV中提供了cornerSubPix()函数来实现亚像素角点检测。 使用方法如下: 1. 首先进行角点检测,可以使用cornerHarris()或者cornerMinEigenVal()等函数。 2. 对于检测到的角点,使用cornerSubPix()函数进行亚像素级别的精细定位。 3. 调用cornerSubPix()函数时,需要传入原始图像、角点坐标、搜索窗口大小等参数,函数会返回精细定位后的角点坐标。 示例代码如下: ``` import cv2 # 读取图像 img = cv2.imread('test.jpg') # 进行角点检测 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) corners = cv2.cornerHarris(gray, 2, 3, 0.04) # 取出角点坐标 corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10) corners = np.int0(corners) # 进行亚像素角点检测 corners_sub = cv2.cornerSubPix(gray, corners, (5, 5), (-1, -1), criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)) # 在图像上绘制角点 for i in corners: x, y = i.ravel() cv2.circle(img, (x, y), 3, (0, 0, 255), -1) for i in corners_sub: x, y = i.ravel() cv2.circle(img, (x, y), 3, (0, 255, 0), -1) # 显示图像 cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,我们先使用cornerHarris()函数进行角点检测,然后使用goodFeaturesToTrack()函数取出角点坐标。最后使用cornerSubPix()函数进行亚像素级别的角点精细定位,并在图像上绘制出检测结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

知来者逆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值