从Arduino获取图像指纹stm32f205

时间:2017-03-08 23:00:43

标签: java image bitmap arduino fingerprint

帮助,我迷路了!

我使用Waveshare的指纹stm32f205,我将其连接到Arduino Uno R3并通过Java与RXTXComm库进行通信。

我已经设法将每个请求的字节输入到Arduino,但缺点是当我收到跟踪图像的字节时,我无法将它们保存为Bitmap或JPG。

我看到数据在以字节形式发送之前是没有符号的整数(0到255)。

字节存储在Bytes数组中,也存储在另一个整数数组中。

你能解释或告诉我应该用什么算法将字节转换成图像吗?

image表示如何发送图像数据。 enter image description here

3 个答案:

答案 0 :(得分:0)

将8位灰度数组转换为RGB:

int[] greyArraySource = ...;

int[] rgbArray = new int[greyArraySource.length];
for(int i=0; i<greyArraySource.length; i++) {
    int color = (int)aImageData[i];
    if(color < 0)
    {
        color = 256 + color;
    }
    rgbArray[i] = Color.rgb(color,color,color);
}

将RGB数组转换为BufferedImage之后:

// Initialize BufferedImage
int width = ...;
int height = ...;
BufferedImage bufferedImage = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);

// Set RGB array to the BufferedImage
BufferedImage.setRGB(0,0,BufferedImage.getWidth(),
    BufferedImage.getHeight(),rgbArray, 0, BufferedImage.getWidth());

将BuffuredImage转换为JPG:

File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);

您的图像似乎是4位,因此您需要更改转换。如果您发布数组值,也许我可以检查。

答案 1 :(得分:0)

非常感谢您回复@LaurentY,这是正确的,图像是4位。 通过一些小修改应用您提供的代码。

imgS = cadena.split(",");
int[] rgbArray = new int[imgS.length];
            for(int i=0; i<imgS.length; i++) {
                int color = Integer.parseInt(imgS[i]);
                if(color < 0)
                {
                    color = 256 + color;
                }
                rgbArray[i] = new Color(color, color, color).getRGB();
            }
            BufferedImage bufferedImage = new BufferedImage(biWidth, biHeight,
                    BufferedImage.TYPE_INT_RGB);

            // Set RGB array to the BufferedImage
            bufferedImage.setRGB(0,0,bufferedImage.getWidth(), bufferedImage.getHeight(),rgbArray, 0, bufferedImage.getWidth());
            File outputfile = new File("D:\\finger.jpg");
            ImageIO.write(bufferedImage, "jpg", outputfile);
        } catch (IOException ex) {
            Logger.getLogger(LeerArduino.class.getName()).log(Level.SEVERE, null, ex);
        }

结果是Image

这里我将数组的值保留在txt File中。每个值用逗号分隔。

见到你!

答案 2 :(得分:-1)

我最近使用过这个指纹模块。我在Matlab上的项目,我可以提取指纹图像。使用串口终端程序(我使用CoolTerm)在文本文件中捕获的图像数据,以十六进制格式分隔,仅用空格。 您的图像不是140x140 / 2字节。在matlab中扫描你的txt文件,124x148 / 2 = 9176字节。此外,您可以将此数字拆分为上半字节和下半字节(4位)。首先,您必须将这些uint8转换为8位字节或两位十六进制。我的java知识不是很好,但在matlab中:

fileID = fopen('Value.txt','r'); A=textscan(fileID,'%u8','Delimiter',','); %text file to matrix YI=reshape(A{1,1},[62,148]); % image reshaped imshow(YI');

使用此代码,您的Value.txt文件会提供此finger image