Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does OpenGL display image faster than OpenCV?

Tags:

c++

opencv

opengl

I am using OpenCV to show image on the projector. But it seems the cv::imshow is not fast enough or maybe the data transfer is slow from my CPU to GPU then to projector, so I wonder if there is a faster way to display than OpenCV?

I considered OpenGL, since OpenGL directly uses GPU, the command may be faster than from CPU which is used by OpenCV. Correct me if I am wrong.

like image 711
hby001 Avatar asked Jan 15 '14 05:01

hby001


People also ask

What is the difference between OpenGL and OpenCV?

OpenGL is a 3D graphics rendering library. OpenCV is a computer vision library “focused on real-time image processing.” GL creates images, CV processes them.

How to draw line in OpenCV?

Python - OpenCV & PyQT5 together You can draw a line on an image using the method line() of the imgproc class. Following is the syntax of this method. mat − A Mat object representing the image on which the line is to be drawn.


2 Answers

OpenCV already supports OpenGL for image output by itself. No need to write this yourself!

See the documentation: http://docs.opencv.org/modules/highgui/doc/user_interface.html#imshow http://docs.opencv.org/modules/highgui/doc/user_interface.html#namedwindow

Create the window first with namedWindow, where you can pass the WINDOW_OPENGL flag. Then you can even use OpenGL buffers or GPU matrices as input to imshow (the data never leaves the GPU). But it will also use OpenGL to show regular matrix data.

Please note:

To enable OpenGL support, configure OpenCV using CMake with WITH_OPENGL=ON . Currently OpenGL is supported only with WIN32, GTK and Qt backends on Windows and Linux (MacOS and Android are not supported). For GTK backend gtkglext-1.0 library is required.

Note that this is OpenCV 2.4.8 and this functionality has changed quite recently. I know there was OpenGL support in earlier versions in conjunction with the Qt backend, but I don't remember when it was introduced.

About the performance: It is a quite popular optimization in the CV community to output images using OpenGL, especially when outputting video sequences.

like image 77
ypnos Avatar answered Oct 21 '22 11:10

ypnos


OpenGL is optimised for rendering images, so it's likely faster. It really depends if the OpenCV implementation uses any GPU acceleration AND if the bottleneck is on rendering side of things.

Have you tried GPU accelerated OpenCV? - http://opencv.org/platforms/cuda.html

How big is the image you are displaying? How long does it take to display the image using cv::imshow now?

like image 24
Dannie Avatar answered Oct 21 '22 09:10

Dannie