OpenCV 将位图转换为矩阵

4

我正在使用c#和OpenCV进行工作。 我有一个位图,希望使用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);
1个回答

4
我正在使用 Bitmap Converter OpenCV扩展 将位图转换为内存中的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");

我想大致看一下它们的区别,我正在使用每种方法处理一段1920x1080像素的桌面屏幕录制500帧视频,并且这是我的发现。
就平均而言,对于Bitmap.Save/Cv2.ImRead 方法,每帧需要0.1403秒。 就平均而言,对于Bitmap Converter方法,每帧需要0.09604秒。在我的家用台式机上,保存并重新读取文件大约需要多50%的时间,我的机器是Core I7第二代,16GB的内存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接