[meta-freescale] Using OpenCV and OpenGL together

Andre Silva Andre.Silva at freescale.com
Thu Dec 19 06:51:41 PST 2013


Hi Friket,

Please, check the imageSize (image->imageSize) to see if nothing wrong is being passed. I will take a look in the code to see if I find anything else.

Regards,
Andre

From: Fikret Alim [mailto:fikret.alim at gmail.com]
Sent: Thursday, December 19, 2013 12:48 PM
To: Silva Andre-B22958
Cc: Fabio Estevam; meta-freescale at yoctoproject.org
Subject: Re: [meta-freescale] Using OpenCV and OpenGL together

Dear Andre,

I am using OpenCV 2.4 and I am sure that OpenCV correctly sets the resolution, because if I comment out everything related to OpenGL and add and imshow command after capturing the image with OpenCV, there is no proble, I can see the video resolution as expected. So, I think that the problem is related to OpenGL part of the code.

Thanks,
Fikret

On Thu, Dec 19, 2013 at 4:40 PM, Andre Silva <Andre.Silva at freescale.com<mailto:Andre.Silva at freescale.com>> wrote:
Hi Friket,

Which OpenCV version are you using ? I remember 1.1 had an issue with setting the camera resolution using these functions, I usually needed to set it directly in CV´s code and then recompiling all the lib.

Regards,
andre

From: Fikret Alim [mailto:fikret.alim at gmail.com<mailto:fikret.alim at gmail.com>]
Sent: Thursday, December 19, 2013 11:56 AM
To: Silva Andre-B22958
Cc: Fabio Estevam; meta-freescale at yoctoproject.org<mailto:meta-freescale at yoctoproject.org>

Subject: Re: [meta-freescale] Using OpenCV and OpenGL together

Hi Andre,

There are only two places that I change for the resolution inside the code. This first one is capture resolution that openCV uses, the other one is glTexImage2D function. I only modify them for the resolution and I don't see any other functions that can be related to resolution.

cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 320, 240, 0, GL_RGB, GL_UNSIGNED_BYTE, bgr_img.data);

The strange thing is; if I set 160x120, 320x240 and even 320x320 resolutions, I don't see any problem. But if I set higher resolutions such as 640x480, 800x600 or 1024x768, etc., I got segmentation fault. Do you have a recommendation for me where and what to check inside the code?

Thanks,
Fikret

On Thu, Dec 19, 2013 at 1:55 PM, Andre Silva <Andre.Silva at freescale.com<mailto:Andre.Silva at freescale.com>> wrote:
Hi Fikret,

I believe that there are another functions in the code using this resolution, if you change the resolution without modifying these other parts the segfault will occur. The only limitation using 320x240 is the performance, since OpenCV runs on cpu, if we use higher resolution the performance will decrease a lot.

Regards,
andre

From: Fikret Alim [mailto:fikret.alim at gmail.com<mailto:fikret.alim at gmail.com>]
Sent: Thursday, December 19, 2013 5:40 AM
To: Fabio Estevam
Cc: meta-freescale at yoctoproject.org<mailto:meta-freescale at yoctoproject.org>; Silva Andre-B22958
Subject: Re: [meta-freescale] Using OpenCV and OpenGL together

Dear Marek,

Thank you for your answer,

I will check the file you sent. I have solved the problem in a different way, I am not sure if this is the correct way or not, but at least it worked after this change:

I have only moved the following two lines from PlaneCreateTex function to PlaneSetTex function.

 glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

Then, PlaneSetTex function will be;

void PlaneSetTex (Mat texture_data)
{
 cvtColor (texture_data, _texture_data, CV_BGR2RGB);
 //imshow("_texture_data",_texture_data);
 glBindTexture(GL_TEXTURE_2D, _texture);
 glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 320, 240, 0, GL_RGB, GL_UNSIGNED_BYTE, _texture_data.data);
 glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}

With this change, now I can run Andre's gesture recognition example, and also I have tried some GLSL shaders for image processing like sobel detection.

But, let me ask a different question: Is there a limition for the webcam resolution? I can only use 320x240 resolution for both Andre's example and gpu sdk examples. If I set a higher resolution, then I get segmentation fault error. I am sure that my webcam supports higher resolutions, since I can get video with openCV at higher resolutions. What can be wrong? Is there a limitation, or do I need to perform some other operations for higher resolutions?

Thanks&Best Regards,
Fikret

On Wed, Dec 18, 2013 at 8:18 PM, Fabio Estevam <festevam at gmail.com<mailto:festevam at gmail.com>> wrote:
On Wed, Dec 11, 2013 at 12:18 PM, Fikret Alim <fikret.alim at gmail.com<mailto:fikret.alim at gmail.com>> wrote:
> Hello,
>
>
>
> I am trying to use OpenCV and OpenGL together for some image processing
> tasks. I have already run OpenCV examples on IMX6, I can also compile and
> run the examples under gpu sdk of Freescale with X11, but when I try to use
> them together I have some problems.
>
>
>
> Actually, what I am trying to make has already been done by Freescale
>
> http://imxcv.blogspot.com/2012/03/gesture-recognition-on-imx6.html
Adding Andre.

Regards,

Fabio Estevam



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-freescale/attachments/20131219/5d702791/attachment-0001.html>


More information about the meta-freescale mailing list