我需要提取由(2n + 1)x(2m + 1)描述的像素区域,集中在左图像(xl,yl)上。 n和m是用户输入参数,xl和yl已经定义。到目前为止,我有这样的代码:从图像中提取一个矩形像素区域
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:
我打算用它来“解压”我的像素区域之中。到目前为止,我的想法是,因为它说代码代码在当前位置提取像素(使用getRGB?),然后嵌套另一个循环以将此像素放置在正确的leftRegion的x,y坐标内。我不知道如何做到这一点,或者如果我想太复杂。或者有可能使用的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 +高度)之外的光栅”。 getSubImage如何工作?图像是否以xl,yl为中心,宽度和高度是同等延伸的,还是以不同的方式工作?我是否遵循正确的道路?
我也在研究一个名为CropImageFilter的类,我不知道这是否会做我所需要的。如果有人能指出我如何做到这一点的正确方向,你就会拥有我所有的爱。和培根。 *免责声明:培根可能不提供 – cherryduck