我正在学习如何识别图片中的形状。我能根据几何体的边数来识别形状。但现在我想知道有没有办法区分图像中的正方形和矩形? 这是我的密码。目前我只是在画几何图形的轮廓。在
import cv2
raw_image = cv2.imread('test1.png')
cv2.imshow('Original Image', raw_image)
cv2.waitKey(0)
bilateral_filtered_image = cv2.bilateralFilter(raw_image, 5, 175, 175)
cv2.imshow('Bilateral', bilateral_filtered_image)
cv2.waitKey(0)
edge_detected_image = cv2.Canny(bilateral_filtered_image, 75, 200)
cv2.imshow('Edge', edge_detected_image)
cv2.waitKey(0)
_, contours, hierarchy = cv2.findContours(edge_detected_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contour_list = []
for contour in contours:
approx = cv2.approxPolyDP(contour,0.01*cv2.arcLength(contour,True),True)
area = cv2.contourArea(contour)
if ((len(approx) >= 3)):
contour_list.append(contour)
cv2.drawContours(raw_image, contour_list, -1, (0,0,0), 2)
cv2.imshow('Objects Detected',raw_image)
cv2.waitKey(0)
我有另一种方法:
找到所有连接的组件。
在原始图像中寻找特征点,因为在这种情况下我们有简单的几何体,而不是复杂的物体,所以可以使用Harris角点算法作为特征点。
将位于相同连接组件上的这些特征点分组。
使用所有连接组件上这些特征点之间的关系(距离/角度),因此可以对这些几何图形进行分类。
如果宽度和高度相同,它就是正方形。否则它是一个矩形。在
这种变化只检测正方形和矩形。在for循环中进行必要的更改以检测圆。您可以使用
len(approx)
来进行区分。在矩形和正方形的区别在于正方形有四条相等的边,所以它是一个特殊的矩形。我在幼儿园学的。在
识别正方形有无数种方法。在
它的周长总是等于sqrt(面积),因此它的圆度总是0.0625
所有角之间的距离为a或a *sqrt(2)
质心到所有4个边的距离a/2相同
。。。在
你说吧。在
相关问题 更多 >
编程相关推荐