今天带来的内容只能用两个字来形容——干货! ! 首先给大家科普一下图像识别的常识。 从计算机的角度来看,一张图片其实就是一个矩阵,每个矩阵中的一个值对应图片的一个像素点。 (下图摘自《机器学习的实际应用》)
其实图中有很多边和角。 今天就来介绍一下如何通过算法找到图片的角点。
其实找角很简单。 就是通过图像矩阵中的移动窗口遍历矩阵中的值。 一旦现有像素发生明显变化,就可能是一个拐点。 这个过程有点像“拿条浴巾闭上眼睛,从上往下搓,用力搓的时候,会觉得这个部位和别的地方不一样。没错,就是你的膝盖。”
严肃点,看数学公式,(x,y)可以理解为一张图片的横纵坐标,也就是人体。(u,v)是窗函数,也就是 移动的毛巾,找图片的拐点,就跟洗澡找身体硬的地方一样,需要不断游动(u,v)的值,当这个值发生剧烈变化时,说明 有一个拐点。
最后,通过数学方法,可以简化上述函数式。 过程很复杂,大家可以理解。 最终结果:
R是这样判断的,R=MIN(x’,y’),x’表示图片的横向变化趋势,y’表示图片的纵向变化趋势 图片,可以用图片说明,
(1) 下图左起第一张图,y’方向的变化很小,而x’方向的变化很大。 它可以设置为x’>0,y'<0,所以R<0。
(2) 中间的两个方向不变,R=0
(3) 最右边的两个方向变化很大,x’>0 , y’ >0, R>0
因此,最右边的图是角,最左边的图是边,中间的图什么都不是。
代码
下面是一段OPENCV实现拐点检测的代码。 你可以用红点标记角落,给你一个直观的印象。
将 numpy 导入为 np
导入cv2
从 matplotlib 将 pyplot 导入为 plt
img = cv2.imread(‘样本.jpg’)
灰色 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
角落= cv2.goodFeaturesToTrack(灰色,25,0.01,10)
角落= np.int0(角落)
因为我在角落里:
x,y = i.ravel()
简历2。 圆(img,(x,y),3,255,-1)
plt.imshow(img), plt.show()
再跑个case给大家看看,周围没有特别明显的转角,所以拍了一张感觉比较明显的转角,嗯!
原图:
运行结果:
今天写代码的时候快没氧了,欢迎暴力转载,良心制作,谢谢 你!