Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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

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
如何使用java从图片中识别和裁剪矩形_Java_Image Processing_Shape Recognition - Fatal编程技术网

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

如何使用java从图片中识别和裁剪矩形,java,image-processing,shape-recognition,Java,Image Processing,Shape Recognition,我对图像处理有点陌生。我所做的是识别给定图像的矩形(不重叠),并通过裁剪创建单独的图像。因此,输出图像应该没有边框。我试过一些例子,但没有一个奏效。仅供参考:这些水平矩形在白色背景中有黑色边框。里面有一些符号 有人有线索或类似的例子吗?这是伪C代码,但我的想法就在那里 主体结构 主回路 这确实不准确。不要试图抄袭过去,它会失败的。 但你有这个想法。 还要注意的是,我只检查了上面的线和左边的林德 XXXXXXXX X o X o X o X o Xooooo

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


有人有线索或类似的例子吗?这是伪C代码,但我的想法就在那里

主体结构 主回路 这确实不准确。不要试图抄袭过去,它会失败的。 但你有这个想法。 还要注意的是,我只检查了上面的线和左边的林德

XXXXXXXX
X      o
X      o
X      o
X      o
Xooooooo
检查X,而不是o

这里的算法只是检查左侧和顶部的X数是否相同。 如果是这样的话,你有一个正方形。 当然,如果你想找到一个矩形,你必须检查下半边和右半边。 那么,它将是: 如果左侧+下方和顶部+右侧的数量相同,那么我们有一个矩形


这种算法应该可以做到这一点。

我从来没有做过这样的事情,但是你可以做的是,当你找到一个黑色像素时,做两个递归循环(一个向右循环,一个向下循环)。然后,调用循环,直到在要查找的像素附近再也找不到黑色像素为止。两个递归循环都将返回到第一个调用。您必须保持在2个循环中的每个循环中找到的黑色像素的当前数量。然后,比较它们。如果你发现有几乎相同的数量,那就是一个正方形/矩形。我不太清楚,但我甚至不确定这是否有效。但是值得一试。谢谢兄弟。有没有类似的先发制人的例子?
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