使用java和opencv修改字节数组导致图像生成失败?

时间:2018-06-06 17:31:37

标签: java opencv

在我的程序中,我正在使用java读取图像,获取其字节数组并通过应用随机函数对其进行修改。现在在整个过程中维持了数组的大小,但是当我尝试使用字节数组构建图像时,获得了一个空图像。我尝试过使用java和opencv来重建图像(图像是440 * 442尺寸.png类型的灰度图像)。

opencv代码:

byte[] bytesArrayForImage=new byte[array.length];
for (int i=0; i<array.length; i++) {
    bytesArrayForImage[i] = (byte) Integer.parseInt(array[i]);

}
Mat mat = new Mat(440,442, CvType.CV_8UC1);

mat.put(0,0, bytesArrayForImage);

 String filename111 = Path;
 Highgui.imwrite(filename111, mat);


java代码:

BufferedImage image=ImageIO.read(new ByteArrayInputStream(bytearray));
ImageIO.write(image, "png", new File(C:\\Users\\domin\\Desktop\\Sop\\,"modified.png"));

1 个答案:

答案 0 :(得分:0)

如果您确定它是灰度,则可以使用它的光栅写入缓冲图像。

例如:

// opencv code for taking image data instead
        byte[] bytesArrayForImage = new byte[194480];
        Arrays.fill(bytesArrayForImage, (byte) 0x00);

        BufferedImage image = new BufferedImage(440, 442, BufferedImage.TYPE_BYTE_GRAY);
        DataBufferByte rasterData = (DataBufferByte) image.getRaster().getDataBuffer();
        System.arraycopy(bytesArrayForImage, 0, rasterData.getData(), 0, 194480);
    /* 
        Check your image with following
        JFrame frame = new JFrame("test");
        frame.setSize(440, 442);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add( new JLabel(new ImageIcon(image)) , BorderLayout.CENTER );
        frame.setVisible(true);    
   */