我正在尝试使用cv2.templateMatching
检测一条垂直线的位置,该垂直线与一条水平线(左上角的x,y)相交。
我得到的是一个奇怪的位置,是完全不准确的。而且我想考虑到当垂直线是在水平线的边缘。
下面是我使用的代码:
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
template = cv2.threshold(template, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
out = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(out)
# Draw detection
cv2.circle(image, (max_loc[0], max_loc[1]), 5, (0, 255, 0), 3)
在下图中,您将看到输入、模板、当前输出、预期输出以及垂直线位于水平线边缘时的角情况:
图像链接:https://drive.google.com/file/d/1QSmihmyu8LBCHOT3_A-Q1JSmFU7LlQhU/view?usp=sharing
对于这个问题你有什么想法吗?有什么解决方案吗?使用模板匹配还是其他方法?
谢谢你,谢谢你
1条答案
按热度按时间4ioopgfo1#
该代码有两个主要部分。首先检测垂直线和水平线,然后检查哪些垂直线与任何水平线相交。
输入图像:
结果图像: