python - 如何从任何角度检测字母“H”
问题描述
我正在努力使用 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()
解决方案
使用 Canny Edge 后,您可以使用 Hough 变换。您将始终获得两条平行线和一条垂直于两条直线的直线,而无需寻找角度。这已经在 OpenCV(概率线变换)中实现。之后,您需要检查输出线的平行度,最后是垂直线,所有线都应在此处连接。 关联
// 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
推荐阅读
- python - 如何在 python 中打印 ascii 表?
- databricks - 仅当文件不存在时才使用 dbtuils 复制 Databricks 文件
- amazon-web-services - 如何从 AWS S3 上的拒绝访问错误中恢复?
- python - 绘制大量数据的建议
- xcode - Xcode。自定义打开快速搜索文件夹
- python - Mandrill 模板不在数组上循环
- c# - 如何从另一个表单调用方法?
- python - 如何识别字典中的匹配值并仅使用这些键创建一个新字符串?
- ios - WKWebView 显示白屏,与原生<->webview 通信
- node.js - 带有 Nodejs 的 Docker 容器 mongodb