我有几张车轮的照片。
它们是灰度级-像素级别从最小值(黑色)到最大值(白色)。
控制盘渲染为单个连接的零部件。
车轮部件为白色,背景为黑色。在
示例图1:
示例图2:
这是带零件的轮子:
我已经找到了轮轴的中心,但我还想在图片中找到所有轮辐的数量,以及断裂辐条的数量。
以下是一些关于图像的事实:
1每个轮辐与轮圈半径对齐
2每个轮辐的最小角宽度2度
三。任何两个辐条中心线之间的角度间隔至少10度
4辐条不是等距放置的
5如果轮辐没有完全连接轮箍和车轴,轮辐中的间隙至少10像素
6轴-由最小半径10像素的填充圆表示
7一个环-由两个与轮轴同心的圆表示。它的最小厚度是10像素
所以,这是我检测车轮车轴的代码。我用HoughCircles来检测最小的圆。
import cv2
import numpy as np
import matplotlib.pyplot as plt
img_bgr = cv2.imread('wheel.png')
img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
circles = cv2.HoughCircles(img_gray, cv2.HOUGH_GRADIENT, 1, 300,
np.array([]), 10, 30, 10, 50)
center_x = 0
center_y = 0
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
cv2.circle(img_bgr, (i[0], i[1]), i[2], (0, 255, 0), 2)
cv2.circle(img_bgr, (i[0], i[1]), 2, (0, 0, 255), 3)
center_x = i[0]
center_y = i[1]
print("%d %d" % (center_x, center_y))
plt.imshow(img_bgr, cmap='gray', interpolation='bicubic')
plt.show()
这就是结果。
另外,我想找出没有被任何辐条φmax截获的最长弧的长度(以度为单位)。认为车轮是平的,即车轮的所有零件都位于一个平面上。
我试图用Canny和HoughLinesP来寻找边缘,但我被卡住了,不知道下一步该怎么做。在
^{pr2}$这是标记辐条的图像:
我是OpenCV的新手,所以任何建议都会很有帮助。在
要找到辐条,用一个小圆圈(靠近车轴)和一个大圆圈(靠近轮箍)取样。这些将截获白色(角度)间隔。连接中间的间隔和检查辐条的连续性。当间隔丢失时,可以外推到中心。在
相关问题 更多 >
编程相关推荐