从 Java 中的二进制图像(布尔数组)裁剪

Posted

技术标签:

【中文标题】从 Java 中的二进制图像(布尔数组)裁剪【英文标题】:Crop from binary image (boolean array) in Java 【发布时间】:2015-04-18 22:20:17 【问题描述】:

我有一个 2D 布尔数组,它是一个分段图像,如下所示:

 000000000000000000
 000000011110000000
 000001110111100000
 000001111110100000
 000000111101100000
 000000111011000000

我想裁剪图片并将其调整为特定大小,如下所示:

 00111100
 11101111
 11111101
 01111011
 01110110

我尝试使用 BufferedImage 来保存它并使用 getSubimage() 但我无法正确设置边界...

我也尝试过这种方法,我有缓冲图像的核心:

            int Width = buffer.getWidth();
            int Height = buffer.getHeight();
            int x1= (int) (core.getX()) - (Width/2);
            int y1= (int)(core.getY()) - (Height/2);
            buffer = buffer.getSubimage(x1, y1, Width, Height); 

如何裁剪和调整大小?

【问题讨论】:

显示你试过的代码,它可以帮助别人给你答案 如果您盯着图像的中间,您的 getSubimage 函数中的宽度和高度超过了图像的宽度和高度。如果你的宽度和高度从宽度/2和高度/2开始,那么剩余的宽度和高度是宽度/2和高度/2,如果你有正确的尺寸,该方法将起作用 【参考方案1】:
    int [][] arr = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
     0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,
     0,0,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,
     0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,0,0,
     0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,0,0,0,
     0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0 ;



    int lowHorizontal =arr[0].length; // give it length of columns "how many columns
    int highHorizontal =0;

    for(int i=0; i<arr.length; i++)
        for(int j=0; j<arr[0].length; j++)

            if(arr[i][j] == 1 )
                if(lowHorizontal > j) 
                    lowHorizontal = j;
            
        
    

    for(int i=arr.length-1; i>=0; i--)
        for(int j=arr[0].length-1; j>=0; j--)
            if(arr[i][j]==1)
                if(highHorizontal < j)
                    highHorizontal = j;
            
        
    


    for(int i=0; i<arr.length; i++)
        for(int j=lowHorizontal; j<=highHorizontal; j++)
            System.out.print(arr[i][j] +" ");
        
        System.out.println();
    

此代码将计算水平索引,我相信有更好的方法。 尝试用同样的方法来计算垂直索引。

打印时 j 的索引应该在边界内,这就是为什么我放 j

0 0 0 0 0 0 0
0 0 1 1 1 1 0
1 1 1 0 1 1 1 
1 1 1 1 1 1 0 
0 1 1 1 1 0 1 
0 1 1 1 0 1 1 

【讨论】:

以上是关于从 Java 中的二进制图像(布尔数组)裁剪的主要内容,如果未能解决你的问题,请参考以下文章

添加,减法,除法和乘以存储在布尔数组中的两个二进制数

在对象高度和宽度上裁剪二进制图像

对象高度和宽度上的裁剪二进制图像

从二进制图像OpenCV C++中裁剪文本

使用python从二进制图像中裁剪感兴趣区域

OCR,识别和裁剪矩形