将图像像素的灰度1D列表转换为灰度图像Dart



我正在尝试将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设置图像中的每个像素,然后将其转换为具有encodePngImage.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);

相关内容

  • 没有找到相关文章

最新更新