.Net 上的圖像類型(Bitmap、Image、Mat、UMat)
- Bitmap:- Bitmap 是一個在 C# 中常用的圖像類型,它屬於 System.Drawing 命名空間。它用於表示和處理點陣圖圖像。
- Bitmap 是一個基於像素的圖像,每個像素都包含顏色信息。您可以輕鬆地創建、讀取、繪製和處理 Bitmap 圖像。
- 這是一個簡單且易於使用的圖像類型,適用於大多數基本圖像處理需求,但在某些情況下可能會有性能問題。
 
- Image<TColor, TColor>:- Image<TColor, TColor> 通常是指一種泛型圖像類型,通常用於 .NET Core 和 .NET 5+ 中的圖像處理庫,如 SixLabors.ImageSharp。
- 這是一種較新的圖像類型,支援更多的圖像處理功能,例如縮放、旋轉、濾鏡等。
- Image<TColor, TColor> 使用泛型,因此您可以指定圖像的顏色類型(例如 RGB、灰度等),這使得它更具彈性和可擴展性。
 
- Mat:- Mat 是一個常見於 OpenCV(Open Source Computer Vision Library)中的圖像類型,用於 C# 中的 OpenCVSharp 或 Emgu.CV 等圖像處理庫。
- Mat 是一種多維數組(通常是2D或3D)表示方式,可以表示圖像、視頻幀或其他數據。
- 它具有豐富的圖像處理和計算能力,包括運算子重載,可以輕鬆進行像素級操作和高級圖像處理。
 
- UMat:- UMat(Unified Memory)是一種 Mat 的變種,用於支援 OpenCV 中的 GPU 加速處理。
- 它允許在 CPU 和 GPU 之間共享圖像數據,以實現更快的圖像處理。
- UMat 可以使用與 Mat 類似的方式進行操作,但能夠充分利用現代圖形硬件加速計算。
 - 轉換- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69- using System.Drawing; 
 using SixLabors.ImageSharp;
 using SixLabors.ImageSharp.PixelFormats;
 using Emgu.CV;
 using Emgu.CV.CvEnum;
 public class ImageConverter
 {
 // Bitmap 轉換為 Image<TColor, TColor>
 public Image<Rgba32> BitmapToImage(Bitmap bitmap)
 {
 using (MemoryStream stream = new MemoryStream())
 {
 // 將 Bitmap 轉換為 byte 數組
 bitmap.Save(stream, ImageFormat.Png);
 byte[] imageBytes = stream.ToArray();
 // 使用 ImageSharp 加載圖像
 Image<Rgba32> image = Image.Load<Rgba32>(imageBytes);
 return image;
 }
 }
 // Image<TColor, TColor> 轉換為 Bitmap
 public Bitmap ImageToBitmap(Image<Rgba32> image)
 {
 using (MemoryStream stream = new MemoryStream())
 {
 // 將 ImageSharp 圖像保存為 Bitmap 格式
 image.Save(stream, ImageFormat.Png);
 // 創建並返回 Bitmap
 return new Bitmap(stream);
 }
 }
 // Mat 轉換為 Bitmap
 public Bitmap MatToBitmap(Mat mat)
 {
 // 使用 Emgu.CV 將 Mat 轉換為 Bitmap
 return mat.ToImage<Bgr, byte>().Bitmap;
 }
 // Bitmap 轉換為 Mat
 public Mat BitmapToMat(Bitmap bitmap)
 {
 // 使用 Emgu.CV 將 Bitmap 轉換為 Mat
 return new Mat(bitmap, DepthType.Cv8U, 3);
 }
 // Mat 轉換為 UMat
 public UMat MatToUMat(Mat mat)
 {
 // 使用 Emgu.CV 將 Mat 轉換為 UMat
 UMat umat = new UMat();
 mat.CopyTo(umat);
 return umat;
 }
 // UMat 轉換為 Mat
 public Mat UMatToMat(UMat umat)
 {
 // 使用 Emgu.CV 將 UMat 轉換為 Mat
 Mat mat = new Mat();
 umat.CopyTo(mat);
 return mat;
 }
 }
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Imisky!
 評論


