【发布时间】:2021-04-13 01:03:55
【问题描述】:
我正在尝试从照片中定位迷宫位置。
我想得到的是迷宫角落的 (x,y) 点。
如您所见,我将cv2.Canny() 应用到图片上,并得到了一个非常干净的图像作为开始。
所以下一步就是定位迷宫了。
我已经搜索了一段时间,所有 SOF 问题都要求找到“完美”矩形的位置,例如this one 和 this one 但在我的情况下,矩形没有闭合轮廓,因此它们的代码在我的情况下不起作用。
还查看了 OpenCV 代码,他们都试图找到轮廓并将这些轮廓绘制到图像上,但这对我不起作用。我刚刚得到了 1 个大轮廓,它与我的照片的边框相距甚远。
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
更新 1
代码:
import cv2
from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
import imutils
img = cv2.imread('maze.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
edges = cv2.Canny(img,100,200)
f,axarr = plt.subplots(1,2,figsize=(15,15))
axarr[0].imshow(img)
axarr[1].imshow(edges)
plt.show()
【问题讨论】:
-
请提供原图,不要在
matplotlib内绘制。首先:对图像进行灰度化,使用一些相对较大的阈值进行二值化阈值(因为纸张非常白),一些形态学以获得漂亮的轮廓,找到轮廓。 -
嗨@HansHirse 感谢您的评论。在 Jupyter Notebook 中显示图像很常见,我可以知道为什么我不应该这样做吗?右侧图像是灰度图像,已经是二进制(0 或 255)。是的,我试图找到我在问题中描述的轮廓,但它们都没有像我在问题中解释的那样工作。
-
这里提供原图,方便大家下载,自己尝试。没有人愿意从保存的绘图图像中手动剪切(近似)图像,特别是因为与处理原始图像相比,它会给出不同的结果。此外,如果没有看到更多关于 minimal reproducible example 的代码,无论如何都很难提供帮助。
-
@HansHirse 是有道理的。我已经上传了原始照片和我的代码。
标签: python opencv image-processing maze opencv-python