gocv.GoodFeaturesToTrack角点检测与绘制

func GoodFeaturesToTrack(img Mat, corners *Mat, maxCorners int, quality float64, minDist float64) 

*corners Mat
为角点检测后保存的角点数据,此Mat对象和其它的Mat对象不同,这里面放的是角点数据,不是图像数据,不能显示在窗口中
maxCorners int, quality float64, minDist float64
这几个参数是可调参数,以情况可调

void cv::goodFeaturesToTrack 	( 	InputArray  	image,
		OutputArray  	corners,
		int  	maxCorners,
		double  	qualityLevel,
		double  	minDistance,
		InputArray  	mask = noArray(),
		int  	blockSize = 3,
		bool  	useHarrisDetector = false,
		double  	k = 0.04 
	) 	

这是c++中 opencv的源码,参数比gocv多了几个,多的参数都是默认值
image 输入8位或浮点32位单通道图像
corners 检测角点的输出向量
maxCorners 返回的最大角点个数
qualityLevel 图像角点最小可接受质量的参数
minDistance 返回角之间的最小可能欧几里得距离
blockSize 计算每个像素邻域上的导数协变矩阵的平均块的大小
useHarrisDetector 是否使用Harris检测器
k 哈里斯探测器的自由参数
opencv中的角点绘制方式网上有很多,这里就不做演示了
gocv中的角点绘制和opencv不同,不能用opencv中的方式去解析绘制角点
只要你用了心去学习,你94未来的大大
这里要解析mat对象,获取行列,你会发现这个mat对象只有1行多列,这里面存的就是角点
如果你是小白你完全不知道怎么获取这个mat对象中的角点
这个角点是32位,要用到下面这个方法,然后在Vecf这里去取
Vecf[0],Vecf[1]分别对应x,y坐标

func (m *Mat) GetVecfAt(row int, col int) Vecf
corners := gocv.NewMat()
gocv.GoodFeaturesToTrack(contMat, &corners, 200, 0.01, 10)
//绘制角点
for row := 0; row < corners.Rows(); row++ {
		point := corners.Row(row)
		for col := 0; col < point.Cols(); col++ {
			vf := point.GetVecfAt(col, 0)//每一个point里只有一行一列 
			fmt.Println(vf[0], vf[1])
			gocv.Circle(&contMat, image.Point{int(vf[0]), int(vf[1])}, 3, color.RGBA{25, 25, 255, 0}, -1)
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值