从图像OpenCV(Python)中查找轮子中的辐条总数

2024-05-20 18:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几张车轮的照片。
它们是灰度级-像素级别从最小值(黑色)到最大值(白色)。 控制盘渲染为单个连接的零部件。 车轮部件为白色,背景为黑色。在

示例图1:

Example image 1

示例图2:

Example image 2

这是带零件的轮子:

This is wheel with it's parts

我已经找到了轮轴的中心,但我还想在图片中找到所有轮辐的数量,以及断裂辐条的数量

以下是一些关于图像的事实:

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()

这就是结果。
Found center of the wheel

另外,我想找出没有被任何辐条φmax截获的最长弧的长度(以度为单位)。认为车轮是平的,即车轮的所有零件都位于一个平面上。

我试图用CannyHoughLinesP来寻找边缘,但我被卡住了,不知道下一步该怎么做。在

^{pr2}$

这是标记辐条的图像:
This is the image of marked spokes

我是OpenCV的新手,所以任何建议都会很有帮助。在


Tags: importimgnpplt像素cv2center黑色
1条回答
网友
1楼 · 发布于 2024-05-20 18:45:58

要找到辐条,用一个小圆圈(靠近车轴)和一个大圆圈(靠近轮箍)取样。这些将截获白色(角度)间隔。连接中间的间隔和检查辐条的连续性。当间隔丢失时,可以外推到中心。在

enter image description here

相关问题 更多 >