我对图像处理有点陌生。我正在做的是识别给定图像的矩形(不重叠)并通过裁剪它们来创建单独的图像。所以输出图像应该没有边框。我尝试了一些示例,但都没有成功。仅供参考:那些水平矩形在白色背景中带有黑色边框。里面有一些符号。
有没有人有线索或类似的例子?关于帮助的问候
我对图像处理有点陌生。我正在做的是识别给定图像的矩形(不重叠)并通过裁剪它们来创建单独的图像。所以输出图像应该没有边框。我尝试了一些示例,但都没有成功。仅供参考:那些水平矩形在白色背景中带有黑色边框。里面有一些符号。
有没有人有线索或类似的例子?关于帮助的问候
这是伪 C 代码,但我的想法就在那里。
struct data {
float pixelsNb;
int currentX;
int currentY;
}
void mainLoop(){
void **imgData = getPixelsFromImage("toto.png");
struct dataRight, dataDown;
loopRight(&dataRight, imgData);
loopDown(&dataDown, imgData);
// now you data right struct contains the number of
//following black pixels to the right
// and you data down, same for the down side.
if (dataRight->pixelNb == dataDown->pixelNb) // not really, should be in %
printf("There's a square !");
}
void loopRight(struct data *dataCurrent, void **imgData){
if (imgData[dataCurrent->currentY][dataCurrent->currentX] == color(0x0)){
dataCurrent->pixelNb++;
dataCurrent->currentX++;
loopRight(dataCurrent, imgData);
}
}
void loopDown(struct data *dataCurrent, void **imgData){
if (imgData[dataCurrent->currentY][dataCurrent->currentX] == color(0x0)){
dataCurrent->pixelNb++;
dataCurrent->currentY++;
loopDown(dataCurrent, imgData);
}
}
}
这确实不准确。不要试图复制和过去,它会失败。但是你有这个想法。另请注意,我只检查上方的线,以及左侧的林德
XXXXXXXX
X o
X o
X o
X o
Xooooooo
X 被检查,而不是 o
这里的算法只是检查左侧和顶部是否有相同数量的 X。如果是这样,你就有一个正方形。当然,如果你想找到一个矩形,你必须检查下边和右边。然后,它将是:如果左侧 + 下侧和上侧 + 右侧的数量相同,则我们有一个矩形。
这种算法应该可以解决问题。