opencv编程珠玑——Opencv中模版匹配后得到的坐标与原图像坐标的转换问题

问题描述:为了寻找能实时地检测人脸特征位置的方法,试验了利用ASM+模版检测的方法,就是先在前几帧中利用ASM检测出人脸的特征点(该方法检测出的特征点精确,但是比较耗时),然后将其检测到的眼睛,嘴巴等区域作为模版保存起来(另存为一张图片),接着在随后的视屏序列中先查找出人脸的整体区域(利用Opencv中的函数,能较准确地检测,检测结果包括人脸区域左上角的顶点坐标U(X,Y)),以及人脸区域的长和宽),然后再在该人脸区域上利用模版匹配的方法检测出脸部的特征区域(检测出来的点的坐标为在人脸区域上的局部坐标)。按照一般的思维想法来说,将利用模板匹配检测出来的特征点的局部坐标加上人脸区域左上角的顶点坐标U(X,Y)即为检测出来的特征点的在整张图片上的全局坐标。但是通过利用上述方法将特征点的坐标转换为全局坐标后在图片上画出这些点发现它们的位置跟实际检测到的不对应。

解决方法:原来利用模版匹配检测后,检测区域的原点位置将会被定为左下角(它跟image->origin不一样,它所谓的原点是指图片的数据是按照从实际拍摄图像的下部到上部的顺序存储的,而image->origin只是表示了图片在显示时是正向的还是反向的),而全局图片的原点位置为左上角。而且利用模版匹配所找到的特征矩形区域返回的是该区域左小角顶点的坐标和该区域的长和宽。所以在将特征点转换为全局坐标时,x坐标的计算方法如上,y坐标的计算方法应该是用人脸区域的高度减去特征点y值然后加上UY。同时在全局图片上画出检测到的特征矩形区域时,由于模版匹配返回的是区域的左下角顶点,所以应将人脸区域的高度将去左下角顶点的y值再减去特征区域的高度再加上UY,作为待画矩形的左上角顶点的y值传给cvRectangle函数。

注:在图片上利用cvRectangle函数画矩形时,如果图片的原点是左上角的话,则应传给函数其所要画矩形的左上角顶点坐标,如果图片的原点是左下角的话,则应传给函数其所要画矩形的左下角顶点坐标。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值