在Android studio中重写bitmapToFloat32Tensor()函数使其返回单通道图片
时间: 2024-05-04 13:17:47 浏览: 194
Pytorch自己加载单通道图片用作数据集训练的实例
重写 `bitmapToFloat32Tensor()` 函数使其返回单通道图片可以按照以下步骤进行:
1. 修改函数的参数,添加一个 `boolean` 类型的参数,用于指示是否返回单通道图片。
2. 在函数内部,检查该参数的值,并根据需要进行单通道转换。
3. 如果需要返回单通道图片,则在转换 `Bitmap` 为 `Tensor` 的过程中,只使用图片的一个通道,并进行相应修改。
下面是一个示例代码,展示了如何重写 `bitmapToFloat32Tensor()` 函数以返回单通道图片:
```java
private Tensor bitmapToFloat32Tensor(Bitmap bitmap, boolean singleChannel) {
int[] intValues = new int[bitmap.getWidth() * bitmap.getHeight()];
float[] floatValues = new float[bitmap.getWidth() * bitmap.getHeight() * 3];
bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int i = 0; i < intValues.length; ++i) {
final int val = intValues[i];
floatValues[i * 3 + 0] = (((val >> 16) & 0xFF) - IMAGE_MEAN) / IMAGE_STD;
floatValues[i * 3 + 1] = (((val >> 8) & 0xFF) - IMAGE_MEAN) / IMAGE_STD;
floatValues[i * 3 + 2] = ((val & 0xFF) - IMAGE_MEAN) / IMAGE_STD;
}
int[] shape = new int[]{1, bitmap.getHeight(), bitmap.getWidth(), 3};
if (singleChannel) {
float[] singleChannelValues = new float[bitmap.getWidth() * bitmap.getHeight()];
for (int i = 0; i < intValues.length; ++i) {
final int val = intValues[i];
singleChannelValues[i] = ((val & 0xFF) - IMAGE_MEAN) / IMAGE_STD;
}
shape = new int[]{1, bitmap.getHeight(), bitmap.getWidth(), 1};
return Tensor.fromBlob(singleChannelValues, shape);
} else {
return Tensor.fromBlob(floatValues, shape);
}
}
```
在上面的代码中,我们添加了一个 `boolean` 类型的参数 `singleChannel`,用于指示是否返回单通道图片。在转换 `Bitmap` 为 `Tensor` 的过程中,如果需要返回单通道图片,我们只使用图片的一个通道,并进行相应修改,最后返回一个只有一个通道的 `Tensor`。否则,我们按原来的方法将所有通道的值存储在 `floatValues` 数组中,并返回一个有三个通道的 `Tensor`。
阅读全文