gpt4 book ai didi

python - 如何使用openCV计算箱子的堆叠数

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:03 24 4
gpt4 key购买 nike

我的目标是尝试生成一种可以计算盒子堆的算法。请记住,我无法对阈值进行硬编码,因为框可能有不同的颜色,因此我无法将其转换为二进制图像。

盒子 Boxes

我尝试的是将其隐藏为灰度并使用 canny 边缘检测器获取所有边缘,如下图所示:

kernel1 = np.ones((5, 5), np.uint8)
kernel2 = np.ones((3, 3), np.uint8)
#kernel3 = np.ones((5, 5), np.uint8)
img = cv2.dilate(img, kernel1, iterations=1)
img = cv2.erode(img, kernel2, iterations=1)
cv2.imshow("blur", img)
# img = cv2.erode(img, kernel1, iterations=1)
# img = cv2.dilate(img, kernel2, iterations=1)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel1)
canny = cv2.Canny(opening, 30, 120)

精明 canny

之后,我使用 houghlines 函数获取所有线条。我做了一个算法来删除行列表中的所有垂直线。下图显示了使用这段代码的结果

lines = cv2.HoughLinesP(canny, 1, np.pi / 200, 90, minLineLength=20, maxLineGap=10)
for line in range(0, len(lines)):
x1, y1, x2, y2 = lines[line][0]
# cv2.line(show, (x1, y1), (x2, y2), (255, 0, 0), 2)
# cv2.imshow('first', show)
result = []

# cannot delete directly from the array because inside the for loop
# use dummy "result[]" to keep the lines that needed
# return the result back to the array after the for loop
print(len(lines))
for line in range(0, len(lines)):
x1, y1, x2, y2 = lines[line][0]
if x1 == x2:
continue
angle = math.atan(float((y2 - y1)) / float((x2 - x1)))
angle = angle * 180 / math.pi
# print(angle)
if abs(angle) <= 5 and ((y1 or y2) < (show.shape[0] - 30)):
result.append(lines[line][0])
lines = result
cv2.waitKey(0)
print(len(lines))
data = []
for line in range(0, len(result)):
x1, y1, x2, y2 = lines[line]
cv2.line(show, (x1, y1), (x2, y2), (0, 255, 0), 2)
#cv2.imshow('show2', show)
data.append((y1 + y2) / 2)

结果 results

我想要的结果是这样的: expected outcome

我已经有了一个用于对线条进行分组的 K 均值聚类,所以我不介意线条相互堆叠。但就目前而言,我需要哪些预处理技能或技巧才能达到预期结果,以便我可以数出盒子的堆叠数?

计划及遇到的问题:

所以我的计划是转换为灰度并使用 canny edge 勾勒出边缘。这里有一个问题,盒子上的文字也是草图。我试图通过使用膨胀来删除文本,但这个过程也模糊了我想要的边缘。我不知道如何获取这些边缘线,但不知道如何获取从文本中检测到的线条。

最佳答案

您可以尝试使用水平 ROI(例如 Rect(0,y,image_w,10) )垂直扫描边缘图像并计算其中的非零像素。它将为您提供沿水平轴的像素密度直方图。然后你可能需要平滑它并找到峰值。这些峰将给出分离线。

关于python - 如何使用openCV计算箱子的堆叠数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58305151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com