如何使用java从图片中识别和裁剪矩形

时间:2014-06-02 11:10:33

标签: java image-processing shape-recognition

我对图像处理有点新意。我正在做的是识别给定图像的矩形形状(不重叠),并通过裁剪出来创建单独的图像。因此输出图像应该没有边框。我尝试了一些例子,但没有一个能做到这一点。仅供参考:那些水平矩形在白色背景中带有黑色边框。里面有一些符号。

有没有人有线索或类似的例子?关于帮助的问候

1 个答案:

答案 0 :(得分:1)

这是伪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. 如果是这样的话,你就有了一个正方形。 当然,如果你想找到一个矩形,你必须检查侧面和右侧。 然后,它将是: 如果左侧+下侧和顶侧+右侧的数量相同,那么我们有一个矩形。

那种algorythm应该可以解决这个问题。