Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python图像处理:最好是PIL或任何相关模块中的角点检测所需的帮助_Python_Image Processing_Python Imaging Library - Fatal编程技术网

Python图像处理:最好是PIL或任何相关模块中的角点检测所需的帮助

Python图像处理:最好是PIL或任何相关模块中的角点检测所需的帮助,python,image-processing,python-imaging-library,Python,Image Processing,Python Imaging Library,我是图像处理新手,需要对该图像进行角点检测: 在这张图中,我需要提取每条线段的起点和终点或角点的坐标。这只是我项目中的一小部分,我被困在这一点上,因为我在图像处理方面没有经验 我不知道我是否正确理解了这个问题,但我认为一种低效率的方法是扫描每个像素并检查该像素周围的4个方向。如果两个非相反方向(即向上和向左或向上和向右等)是彩色的,则它是一个角 希望这能有所帮助。这有点像是在暗中拍摄,但我假设您可以解析png标题以检索图像的宽度/高度(请看)。结合图像的位深度,您应该能够通过简单的数学计算确定

我是图像处理新手,需要对该图像进行角点检测:


在这张图中,我需要提取每条线段的起点和终点或角点的坐标。这只是我项目中的一小部分,我被困在这一点上,因为我在图像处理方面没有经验

我不知道我是否正确理解了这个问题,但我认为一种低效率的方法是扫描每个像素并检查该像素周围的4个方向。如果两个非相反方向(即向上和向左或向上和向右等)是彩色的,则它是一个角


希望这能有所帮助。

这有点像是在暗中拍摄,但我假设您可以解析png标题以检索图像的宽度/高度(请看)。结合图像的位深度,您应该能够通过简单的数学计算确定每个角的位置。一旦找到角点,您应该能够使用简单的算法检查相邻像素数据来跟踪该线

这听起来也像是家庭作业。如果是这样,您应该将其标记为这样。

我建议使用Harris角点检测器和Shi-Tomasi角点检测器附带的。

这里有一个解决方案,使用:

从skimage导入io、颜色、形态
从scipy.signal导入卷积2D
将numpy作为np导入
将matplotlib.pyplot作为plt导入
img=color.rgb2gray(io.imread('6EnOn.png'))
#将所有线减少到一个像素厚度
蛇=形态。骨骼化(img<1)
#查找只有一个邻居的像素
角点=卷积2D(蛇,[[1,1,1],
[1, 0, 1],
[1,1,1]],mode='same')==1
角=角和蛇
#这些是线段的起点和终点位置
y、 x=np.其中(角)
plt.imshow(img,cmap=plt.cm.gray,插值=‘最近’)
plt.散射(x,y)
打印轴(“关闭”)
plt.show()

接受的答案无法找到图像中的所有角落

使用Harris角点检测,可以找到所有可能的角点。由于OP对模块的选择没有限制,我选择使用OpenCV库执行以下操作

结果:

图像中的每个角都被正确识别


提供算法和代码的详细信息。

如果线条的厚度为1像素,则此操作将有效。这种情况很少发生,示例图像也不例外(放大)。工作算法要复杂得多()。很好-这里很好地使用了卷积-我最终会使用8个不同的
np.rolls
,所以我读了你的答案就更好了!;)很高兴你发现它很有用!
from skimage import io, color, morphology
from scipy.signal import convolve2d
import numpy as np
import matplotlib.pyplot as plt

img = color.rgb2gray(io.imread('6EnOn.png'))

# Reduce all lines to one pixel thickness
snakes = morphology.skeletonize(img < 1)

# Find pixels with only one neighbor
corners = convolve2d(snakes, [[1, 1, 1],
                              [1, 0, 1],
                              [1, 1, 1]], mode='same') == 1
corners = corners & snakes

# Those are the start and end positions of the segments
y, x = np.where(corners)

plt.imshow(img, cmap=plt.cm.gray, interpolation='nearest')
plt.scatter(x, y)
plt.axis('off')
plt.show()