帮助,我迷路了!
我使用Waveshare的指纹stm32f205,我将其连接到Arduino Uno R3并通过Java与RXTXComm库进行通信。
我已经设法将每个请求的字节输入到Arduino,但缺点是当我收到跟踪图像的字节时,我无法将它们保存为Bitmap或JPG。
我看到数据在以字节形式发送之前是没有符号的整数(0到255)。
字节存储在Bytes数组中,也存储在另一个整数数组中。
你能解释或告诉我应该用什么算法将字节转换成图像吗?
此image表示如何发送图像数据。
答案 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