OpenCvSharp 实现 Mat.ToPointArray().Select
时间: 2024-01-22 21:17:26 浏览: 71
OpenCvSharp 实现 `Mat.ToPointArray().Select`,可以使用 LINQ 扩展方法 `Cast<T>()` 和 `Select()`,代码类似如下:
```csharp
using OpenCvSharp;
using System.Linq;
// ...
Mat mat = new Mat(3, 2, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
Point[] points = mat.ToPointArray().Cast<Point>().Select(p => new Point(p.X + 1, p.Y + 1)).ToArray();
```
这里的 `ToPointArray()` 方法返回一个 `IEnumerable<Point>`,我们需要先通过 `Cast<Point>()` 将其转换为 `IEnumerable<object>`,再通过 `Select()` 将每个 `object` 转换为 `Point` 类型,并做进一步的处理。以上面的代码为例,`points` 数组的值为 `{ (1, 1), (2, 1), (1, 2), (2, 2), (1, 3), (2, 3) }`。
相关问题
opencvsharp的mat转emgucv的mat
OpenCVSharp和Emgu CV都是.NET平台上针对OpenCV(开源计算机视觉库)的封装,它们都提供了一种矩阵数据结构(Mat)。尽管它们底层的数据结构是相通的,但在跨库转换时需要注意一些细节。
从OpenCVSharp的Mat转换到Emgu CV的Mat,可以直接进行,因为两者都是基于OpenCV的Mat对象。通常,如果你有以下几个步骤:
1. 首先,确保你的OpenCVSharp Mat对象已经初始化好,包含了你需要的数据。
2. 使用Emgu.CV.CvInvoke.MarshalCopy函数,将OpenCVSharp的Mat的指针传递给Emgu CV的Mat构造函数,如下所示:
```csharp
OpenCvSharp.Mat opencvMat = ...; // OpenCVSharp Mat实例
Emgu.CV.Mat emguMat = new Emgu.CV.Mat(opencvMat.Size, opencvMat.Type);
CvInvoke.MarshalCopy(opencvMat.Data, emguMat.DataPointer, opencvMat.Size.Width * opencvMat.ElementSize());
```
3. 这样,你就成功地创建了一个Emgu CV的Mat对象,其内容和OpenCVSharp的Mat是一致的。
c#中BItmap类型与opencvsharp中Mat类型之间怎么相互转换
在 C# 中,可以使用 OpenCvSharp 库进行图像处理,其中 Bitmap 类型是 System.Drawing 命名空间中的一部分,而 Mat 类型是 OpenCvSharp 命名空间中的一部分。你可以使用以下方法实现 Bitmap 和 Mat 之间的相互转换:
1. Bitmap 转换为 Mat:
```csharp
using OpenCvSharp;
Bitmap bitmap = new Bitmap("image.jpg");
Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);
```
2. Mat 转换为 Bitmap:
```csharp
using OpenCvSharp;
using OpenCvSharp.Extensions;
Mat mat = Cv2.ImRead("image.jpg");
Bitmap bitmap = BitmapConverter.ToBitmap(mat);
```
在转换过程中,OpenCvSharp.Extensions 命名空间中的 BitmapConverter 类提供了 Bitmap 和 Mat 之间的转换方法。
需要注意的是,在转换过程中可能会涉及到图像格式和通道数的差异。确保所使用的图像格式和通道数是兼容的,以避免转换错误。
希望对你有所帮助!
阅读全文