我正在开发一个机器人项目,我们需要实现某种形式的图像识别来找到正确的路径。有一个旋转的圆盘,其方向如下所示:
我编写了下面的代码,它使用网络摄像头成功捕获视频流,并尝试从提供的模板中查找磁盘的图像:
import cv2
IMGn = cv2.imread("North.png",0)
webcam = cv2.VideoCapture(0)
grayScale = True
key = 0
def transformation(frame,template):
w, h = template.shape[::-1]
res = cv2.matchTemplate(frame,template,cv2.TM_SQDIFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = min_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(frame,top_left, bottom_right, 255, 2)
return frame
while (key!=ord('q')):
check, frame = webcam.read()
if(grayScale):
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frame = transformation(frame,IMGn)
cv2.imshow("Capturing", frame)
key = cv2.waitKey(1)
webcam.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
这不太好用,但至少可以找到指南针的大致轮廓。但是我根本不知道如何找到圆的旋转!尺寸似乎也是一个问题(当距离太远或太近时,跟踪就会混乱)。这是我第一次做任何与图像识别有关的事情,一般来说这没有帮助,所以请尝试简化你的答案。谢谢。
我遇到了 cv2.findContours 问题。它似乎返回 3 个值,而不是 2 个。除此之外,代码成功检测并裁剪图像,但在最后一步中无法找到线条。还有一个问题是,如果图片旋转超过 180 度,则会给出错误的结果,因为线旋转了超过 180 …