【问题标题】:How to detect letter “H” from any angle如何从任何角度检测字母“H”
【发布时间】:2024-04-19 01:55:02
【问题描述】:

我正在努力使用 python 检测 openCV 中的特定形状。具体形状是字母“H”。

我已经考虑了多种方法来做到这一点。模板匹配和 OCR 在任何角度都不起作用,所以我正在考虑使用精明的边缘检测。 你们中的任何人都可以提供一些关于如何从这里继续前进的指导。应用 Canny 过滤器后,如何检查字母“H”是否存在?

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
binary = cv2.erode(gray, None, iterations=2)
median_filter = cv2.medianBlur(binary, 3)
edges = cv2.Canny(median_filter, 120, 180)

bin, contours, _hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
    cnt_len = cv2.arcLength(cnt, True)
    cnt = cv2.approxPolyDP(cnt, 0.02 * cnt_len, True)

cv2.imshow("crop", binary)
cv2.imshow("Frame", edges)
cv2.imshow("frame", frame)
key = cv2.waitKey(1) & 0xFF

if key == ord("q"):
    break

cv2.destroyAllWindows()

【问题讨论】:

  • 我以前试过这个,但我没有得到任何输出。
  • 你确定?这不是模板匹配,而是特征匹配。它非常擅长寻找简单的模式。更详细地描述你的任务的局限性(H是相同的字体、颜色等、图像质量和照明,它只是缩放/旋转还是全视角),如果是的话,我会在几天内尝试整理一个例子对你来说还不算太晚。

标签: python opencv detection contour


【解决方案1】:

最简单(但速度较慢)的解决方案是在图像的许多旋转版本上运行模板匹配或 OCR。 OCR 方法通常至少有一些小的旋转容差,因此您可能不需要那么多。如果计算复杂度不是问题,我会这样做,因为它非常健壮。

如果您需要一个快速的解决方案,您可以尝试使用启发式方法先找到旋转。例如,您可以找到主要的边缘方向。对于 H,主要边缘方向将是 H 两侧的垂直条的方向。使用该方向,您可以校正旋转并使用 OCR 或模板匹配。这当然不适用于任意模式。

【讨论】:

    【解决方案2】:

    您可以在使用 Canny Edge 后使用 Hough 变换。您将始终获得两条平行线和一条垂直于两条直线的直线,而无需寻找角度。这已经在 OpenCV(概率线变换)中实现了。之后,您需要检查输出线的平行度,最后是垂直线,所有线都应在此处连接。 Link

    // runs detection
    HoughLinesP(image, linesP, rho, (CV_PI / 180)*theta, threshold, minLineLength, maxLineGap); 
        }
    //Draw lines
    for (int i = 0; i < linesP.size(); i++)
        {
            Vec4i l = linesP[i];
            line(image, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(255, 255, 255), 3, LINE_AA);
        }
    //continue here
    

    【讨论】:

    • 能否请您给我更多信息如何获得平行线或为我写一些例子?谢谢
    • 你会从 HoughLinesP 得到线条。通过遍历所有线,您可以查看到线的起点和终点的距离是否保持不变。示例行 a 和 b。距离 a1 = b1 和 a2 = b2。如果它的距离相同,您应该从“H”找到您的“I I”。双 xDiff = a.x - b.x;双 yDiff = a.y - b.y; std::sqrt((xDiff * xDiff) + (yDiff * yDiff));
    • 现在您必须搜索交叉点以从“H”中找到“-”。看看这个:answers.opencv.org/question/9511/…
    最近更新 更多