我正在使用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);
答案 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");