如何在UWP App(C#)中缩小像素值?

问题描述 投票:0回答:1

我基于存储库(C#)中提供的Squeeze Net示例构建了一个UWP应用程序,该示例使用深度学习模型(ONNX)进行图像分类。我已经在PyTorch中构建了深度学习模型,其中图像的像素值已经从范围[0,255]缩小到[0,1],然后用通道方(RGB)标准偏差和平均值进行归一化。因此,此模型需要除[0,255]范围之外的像素值。

但是在UWP应用程序中,在将输入绑定到模型之前,我无法执行像素值的缩减。我搜索了SoftwareBitmap类,但找不到执行此缩减操作的方法。任何帮助将非常感激。

我需要在这些代码行之间的某处进行此操作。

await LoadModel();

            // Trigger file picker to select an image file
            var picker = new FileOpenPicker();
            picker.ViewMode = PickerViewMode.Thumbnail;
            picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            picker.FileTypeFilter.Add(".jpg");
            picker.FileTypeFilter.Add(".jpeg");
            picker.FileTypeFilter.Add(".png");
            StorageFile file = await picker.PickSingleFileAsync();

            outputTextBlock.Text = $"The selected Image: {file.Name}";

            SoftwareBitmap softwareBitmap;
            using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
            {
                // Create the decoder from the stream 
                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

                PixelDataProvider random = await decoder.GetPixelDataAsync();
                // byte[] pD =  random.DetachPixelData();
                //await FileIO.WriteBytesAsync("path/file.ext", pD);
                // System.IO.File.WriteAllBytes("path/file.ext", pD);
                // byteData.Text = $"{pD}";


                // Get the SoftwareBitmap representation of the file in BGRA8 format
                softwareBitmap = await decoder.GetSoftwareBitmapAsync();
                softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore);
            }

            var streamD = await file.OpenReadAsync();
            var imageSource = new BitmapImage();
            await imageSource.SetSourceAsync(streamD);

            selectedImage.Source = imageSource;

            // Display the image
            //SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
            //await imageSource.SetBitmapAsync(softwareBitmap);
            //selectedImage.Source = imageSource;

            // Encapsulate the image within a VideoFrame to be bound and evaluated
            VideoFrame inputWoodImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);

            await EvaluateVideoFrameAsync(inputWoodImage);
c# windows uwp pixel
1个回答
0
投票

这是这个帖子的转贴,包含一些答案,更实际:https://github.com/Microsoft/Windows-Machine-Learning/issues/22

© www.soinside.com 2019 - 2024. All rights reserved.