OpenCV将位图转换为Mat

时间:2018-04-28 17:59:28

标签: c# opencv bitmap mat

我正在使用c#和OpenCV。我有一个Bitmap,我想用OpenCV提供的VideoWriter作为视频帧编写。我用Python做过这个,所以知道它会起作用。我只需要从Bitmap到Mat的转换步骤。

我的(部分)代码看起来大致像这样......

VideoWriter video = new VideoWriter(filename, fps, frameSize, false);
Bitmap image = SomethingReturningABitmap();
// NEED CONVERT FROM Bitmap to Mat
Mat frame = new Mat();
video.Write(frame);

2 个答案:

答案 0 :(得分:0)

我正在使用Bitmap Converter OpenCV Extensions将位图转换为内存中的Mat对象。

PSTK ps = new PSTK();
Image img = ps.CaptureScreen();    
Bitmap bmpScreenshot = new Bitmap(img);
image = BitmapConverter.ToMat(bmpScreenshot);

一个人也可以做下面的事情,但是从磁盘写入和读取数据将导致相当大的开销。

myBitmap.Save("TempFile.PNG");
Mat myMatImage = CvInvoke.Imread("TempFile.PNG");

我想大致了解一下差异。我使用每种方法都在处理1920 x 1080的台式机屏幕投射的500帧画面,这就是我的发现。

平均而言,对于Bitmap.Save/Cv2.ImRead方法而言,它花费了0.1403 seconds per frame。 平均而言,对于Bitmap Converter方法,它花费了0.09604 seconds per frame。使用家用台式机保存和重新读取文件大约需要50%的时间。 Core I7第二代,16GB RAM。

答案 1 :(得分:-1)

网上有许多冗长的解决方案。但是,有一种简单的方法可以做到这一点。保存位图并将其读作Mat。

myBitmap.Save("TempFile.PNG");
Mat myMatImage = CvInvoke.Imread("TempFile.PNG");