我正在搜索检测图像边框的程序, 例如,我有一个正方形,程序检测到X / Y-Coords
示例:
alt text http://img709.imageshack.us/img709/1341/22444641.png
答案 0 :(得分:5)
这是一个非常简单的边缘检测器。它适用于二进制图像。它只计算水平和垂直像素之间的差异,如image.pos [1,1] = image.pos [1,1] - image.pos [1,2]和垂直差异相同。请记住,您还需要在值0..255。
的范围内对其进行标准化但是!如果您只需要一个程序,请使用Adobe Photoshop。
用C#编写的代码。
public void SimpleEdgeDetection()
{
BitmapData data = Util.SetImageToProcess(image);
if (image.PixelFormat != PixelFormat.Format8bppIndexed)
return;
unsafe
{
byte* ptr1 = (byte *)data.Scan0;
byte* ptr2;
int offset = data.Stride - data.Width;
int height = data.Height - 1;
int px;
for (int y = 0; y < height; y++)
{
ptr2 = (byte*)ptr1 + data.Stride;
for (int x = 0; x < data.Width; x++, ptr1++, ptr2++)
{
px = Math.Abs(ptr1[0] - ptr1[1]) + Math.Abs(ptr1[0] - ptr2[0]);
if (px > Util.MaxGrayLevel) px = Util.MaxGrayLevel;
ptr1[0] = (byte)px;
}
ptr1 += offset;
}
}
image.UnlockBits(data);
}
Util类的方法
static public BitmapData SetImageToProcess(Bitmap image)
{
if (image != null)
return image.LockBits(
new Rectangle(0, 0, image.Width, image.Height),
ImageLockMode.ReadWrite,
image.PixelFormat);
return null;
}
如果您需要更多解释或算法,只需询问更多信息,而不要如此笼统。
答案 1 :(得分:4)
您可以使用任何图像处理库,例如Opencv。这是在c ++或python中。 您应该寻找边缘检测功能,例如Canny边缘检测。 当然,这需要一些潜入图像处理。 您提供的示例图像应该直接检测,图像的噪声/变化有多大?
答案 2 :(得分:3)
这取决于您想要对边框执行的操作,如果您只想获取区域边缘的值,请使用名为Connected Components Region的算法。在使用算法之前,您必须知道该区域的值。这将在边界周围导航并收集外部区域。如果您试图仅检测外线,则获得图像的渐变,它将显示线条的位置。为此,使用边缘检测滤波器(如Prewitt,Sobel等)对图像进行卷积
答案 3 :(得分:1)
shape recognition algorithm可能会帮助你,只要它有某种实心边框,背景颜色是实心的。
答案 4 :(得分:0)
从它的声音中,你只需要一个blob extraction algorithm。之后,x / y的最低/最高值将为您提供角点的坐标。