从图像中提取矩形像素区域

时间:2011-11-18 16:17:36

标签: java image extract pixel region

我需要提取以leftimage(x1,y1)为中心的(2n + 1)x(2m + 1)所描述的像素区域。 n和m是用户输入参数,xl和y1已经定义。到目前为止,我有这段代码:

for(int xl = n; xl < picOneGreyScale.getWidth() - n; xl++) {
    for(int yl = m; yl < picOneGreyScale.getHeight() - m; yl++) {
        //extract (2n+1) x (2m+1) pixel region centred on leftimage (xl,yl);
        for(int nArea = xl-n; nArea < xl+n+1; nArea++) {
            for(int mArea = yl-m; mArea < yl+m+1; mArea++) {
                *code here*   
            }
}

我不确定如何继续。我已经定义了一个名为leftRegion的BufferedImage:

BufferedImage leftRegion = new BufferedImage((2*n+1),(2*m+1),BufferedImage.TYPE_BYTE_GRAY);

我打算用它来“提取”我的像素区域。到目前为止,我的想法是,在这里用代码来提取当前位置的像素(使用getRGB?),然后嵌套另一个for循环,将此像素放在正确的x,y坐标中leftRegion。我不确定如何做到这一点,或者我认为太复杂了。或者,也可以使用扩展参数的getRGB:

getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) 

而不是两个内部的for循环,但我再也不知道如何实现它。最后有一个名为copyData的BufferedImage方法看起来可能是相关的,但我不知道如何使用它。实现这个的最佳方法是什么?非常感谢。

其他信息:

好的,我正在尝试使用BufferedImage类的getSubImage方法:

leftRegion = picOneGreyScale.getSubimage(xl, yl, (2*n+1), (2*m+1));

只有我收到错误“(y + height)超出Raster”。 getSubImage如何正常工作?图像是否以xl,y1为中心,宽度和高度在两侧均匀延伸,还是以不同的方式工作?我是否遵循了正确的道路?

1 个答案:

答案 0 :(得分:0)

我明白了。我只是用这个替换了两个内部for循环:

leftRegion = picOneGreyScale.getSubimage(xl-n, yl-n, (2*n+1), (2*m+1));