OpenCV Convert Bitmap to Mat
Asked Answered
H

1

6

I'm working with c# and OpenCV. I have a Bitmap that I want to write as a frame of video using the VideoWriter provided by OpenCV. I've done this in Python so know it will work. I just need the conversion step from Bitmap to Mat.

My (partial) code looks roughly like this...

VideoWriter video = new VideoWriter(filename, fps, frameSize, false);
Bitmap image = SomethingReturningABitmap();
// NEED CONVERT FROM Bitmap to Mat
Mat frame = new Mat();
video.Write(frame);
Hintze answered 28/4, 2018 at 17:59 Comment(0)
A
5

I'm using the Bitmap Converter OpenCV Extensions to convert my Bitmap to a Mat object in memory.

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

One could also do the below but then you will incur significant overhead for writing and reading the data from disk.

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

I wanted to see what the difference looked like, roughly. I was processing a 1920x1080 screen cast of my desktop for 500 frames using each method and here's what I found.

On average, for the Bitmap.Save/Cv2.ImRead method, it took 0.1403 seconds per frame. On average, for the Bitmap Converter method, it took 0.09604 seconds per frame. It takes roughly 50% longer to save and re-read the file using my home desktop machine. Core I7 2nd gen, 16GB RAM.

Aberration answered 2/7, 2020 at 19:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.