我有一张图片,图片中有一条偏线。它们一直是水平或垂直线。我不知道线的颜色,也不知道线的宽度。
如何使用PHP来检测这样的一行?
正如您在上传的图片中看到的,我需要切片3x3个部分。我需要3个垂直和3个水平部分来切割部件。请注意,内容区域周围有一个带有一些标记的矩形,这是图像的一部分。
我们可以使用这些标记来获取坐标。
答案 0 :(得分:1)
如果它们具有相同的颜色/长度,则最好通过比较每条线的第一个和最后一个N个像素来使用这些标记。它比解析每一行上的所有像素更有效。
答案 1 :(得分:0)
您必须按行和列方式检查图像。您很可能会使用imagecolorat()
。遍历所有列和行。如果两个(或任意限制)或更多像素具有相同(或非常接近)的颜色,则它们构成一条线。
答案 2 :(得分:0)
绝对使用标记,否则这是一个难题。
要使用标记,您只需找到他们的位置即可。要做到这一点,从边缘开始,采用连续的单像素宽条带并查找周期性偏差。经典且相当简单的方法是使用自相关。由于您的标记非常清晰(即噪声非常小),您可能会找到一种更简单的方法,例如平均整个条带的像素值以及与此相差多少的所有内容都是标记;或者,制作一个像素值的直方图,它应该有两个尖锐的凸起,一个用于背景的大凸起,以及用于标记的小凹凸等。但无论你使用什么方法,找到标记,你就完成了。
答案 3 :(得分:0)
在步骤4& 8你可以做任何平均,噪音检测等。 在步骤7& 11您可以重复前面的步骤并平均$ iMarkWidth,以避免在行顶部出现锯齿错误。在这种情况下,你要停止:
答案 4 :(得分:0)
您可以尝试进行边缘检测,然后使用Hough transform检测线条。在你的情况下的问题是与线对应的边缘非常微弱。另一方面,您只需要查找垂直和水平线,这样就可以对问题进行大量限制。