Java:Android中16个图像字节数组的平均值

Java:Android中16个图像字节数组的平均值,java,android,Java,Android,我的android应用程序正在连续拍摄多张图像。每次使用takePicture()拍照时,我都会使用BitmapFactory将字节数组转换为PNG。我的最终目标是获得16张图像的平均值。为了加快这个过程,我考虑在创建PNG之前对字节数组求平均值,而不是创建16个图像,然后尝试对它们求平均值。有什么建议吗 简单地说,我想做这样的事情: imgByteArray1 = [1,2,3,4] imgByteArray2 = [4,3,2,1] totalImgByteArray = imgByteA

我的android应用程序正在连续拍摄多张图像。每次使用takePicture()拍照时,我都会使用BitmapFactory将字节数组转换为PNG。我的最终目标是获得16张图像的平均值。为了加快这个过程,我考虑在创建PNG之前对字节数组求平均值,而不是创建16个图像,然后尝试对它们求平均值。有什么建议吗

简单地说,我想做这样的事情:

imgByteArray1 = [1,2,3,4]
imgByteArray2 = [4,3,2,1]

totalImgByteArray = imgByteArray1 + imgByteArray2
//totalImgByteArray will equal [5,5,5,5]
aveImgByteArray = totalImgByteArray / 2
//aveImgByteArray will equal [2.5,2.5,2.5,2.5]
然后从aveImgByteArray我可以创建一个PNG文件

我使用与中相同的代码来捕获图像。 首先,我将字节数组收集到一个字节数组中:

for(int i=0; i < data.length ; i++)
    totalImgData[i] = (byte) (totalImgData[i] + data[i]);
for(int i=0;i
在收集了16幅图像后,我对整个阵列进行平均:

for (int j=0; j < totalImgData.length; j++)
    aveImgData[j] = (byte) (totalImgData[j] / 16);
for(int j=0;j

这不管用。。。抱歉,我对使用Java的Android有点陌生。

每次拍照时,都会在回调中得到一个包含数据的
字节[]
。只需跟踪这些信息,ex

long totalBytes = 0;
int count = 0;

public void onPictureTaken(byte[] data ...)
{
    ....
    totalBytes += data.length;
    count++;
}
完成后,您可以计算平均值:

//This isn't the best example (all the type casts), but it gives you the idea
long avg = (long) Math.ceil((double) totalBytes / (double) count);

但我不确定重点是什么——你可能不想同时在内存中存储16幅图像。当你从安卓系统获得
字节[]
时,你就得到了原始图像数据,这些数据可能相当大。存储其中16项肯定会消耗你的应用程序的大量资源(假设它不会崩溃)。

谢谢你的回复。对于我的项目,我需要尽可能多地消除图像中的噪声。平均值应该可以解决这一点。图像为480x360。我不认为这会填满记忆,导致问题。我试试看。我是否必须将所有16个阵列都保留在内存中?我只需要添加到totalBytes。这不会让内存变大,对吗?只是数值会增加。我不明白totalBytes+=data.length是如何工作的?我不确定从图像中消除噪声是什么意思,如果需要操作图像,则需要存储字节,因为
onPictureTaken
是数组标记为垃圾收集之前的最后一站。所有
totalBytes+=data.length
所做的就是保留一个#字节的总和。它相当于
totalBytes=data.length+totalBytes
我已经用我现在尝试的内容更新了帖子。