我正在尝试将pytorch_mobile包预测的二进制掩码转换为可以在应用程序中显示的图像。
我收到的预测是一个一维列表,其中包含我的模型吐出的预测,这些预测对于分配给背景的像素是负数,对于分配给感兴趣区域的像素是正数。之后,我创建了一个列表,将值0分配给所有以前的负值,将值255分配给所有之前的正值,从而生成一个一维列表,其中包含值0或255,具体取决于像素的分类。
图像预测的大小为512x512像素,列表的长度随后为262144。
如何将此列表转换为图像,以便保存到存储中或通过flutter UI显示?
这是我当前的代码:
customModel = await PyTorchMobile
.loadModel('assets/segmentation_model.pt');
result_list = [];
File image = File(filePath);
List prediction = await customModel.getImagePredictionList(image, 512, 512);
prediction.forEach((element) {
if (element >0){
result_list.add(255);
}else if(element <= 0){
result_list.add(0);
}
});
result_list_Uint8 = Uint8List.fromList(result_list);
以下内容应该可以完成任务。只需使用Image.setPixelSafe
设置图像中的每个像素,然后将其转换为具有encodePng
和Image.memory
的FlutterImage
小部件。
import 'package:image/image.dart' as im;
...
final img = im.Image(512, 512);
for (var i = 0, len = 512; i < len; i++) {
for (var j = 0, len = 512; j < len; j++) {
final color = result_list_Uint8[i * 512 + j] == 0 ? 0 : 0xffffff;
img.setPixelSafe(i, j, 0xff000000 | color);
}
}
final pngBytes = Uint8List.fromList(im.encodePng(img));
photoImage = Image.memory(pngBytes);