最近在学习亚像素级角点检测,发现一个问题,就是我用Shi-Tomasi角点检测得到的值在未进行类型转换时,就已经是亚像素级了。有点奇怪,不知道是不是OpenCV版本问题。最后就是标记的红色圆圈好像已经覆盖了亚像素级范围了,应该减小。
亚像素检测:
import cv2 as cv
import numpy as np
if __name__=='__main__':
img=cv.imread("D:/testimage/ma.jpg")
gray_img=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
result_img=img.copy()
#Shi-Tomasi角点检测
corners=cv.goodFeaturesToTrack(gray_img,100,0.01,10,blockSize=3,useHarrisDetector=False,k=0.04)
#迭代算法模板(1.类型 2.迭代次数 3.阈值)
criteria=(cv.TermCriteria_EPS+cv.TermCriteria_MAX_ITER,30,0.01)
#亚像素角点检测
corners2=cv.cornerSubPix(gray_img,corners,(5,5),(-1,-1),criteria)
j=0
for i in corners2:
x,y=i.ravel()
j=j+1
cv.circle(result_img,(x,y),2,(0,0,255),2)
print("角点坐标"+str(j)+":",(x,y))
cv.imshow("original image", img)
cv.imshow("result image",result_img)
#cv.imwrite("D:/testimage/result ma.jpg",result_img)
cv.waitKey(0)
cv.destroyAllWindows()
结果:
坐标点: