javacv icon indicating copy to clipboard operation
javacv copied to clipboard

Problem converting frame to IplImage

Open Haprst opened this issue 6 months ago • 5 comments

I'm not a beginner, but I've been away from javaCV for 12 years... My main program calls Video.getFrame(200). That program is using FFmpegFrameGrabber to grab a frame, OpenCVFrameConverter.ToIplImage() to convert it to IplImage, and cvShowImage to display it. When that code compiles there are no errors. But when it runs it hangs after printing of "Got here 5" and displaying a too small completely black image. So the cvShowImage is the point of failure. When I omit the cvWaitKey statements, there's an uncaught execution time exception. FailureCode.txt

What am I doing wrong?

Earlier I got similar code to work converting to BufferedImage instead of IplImage, but I thought there might be some advantage to returning to things I was familiar with 12 years ago.

The code for Video.getFrame is shown:

FailureCode.txt

Haprst avatar Feb 02 '24 03:02 Haprst

FFmpegFrameGrabber owns the Frame. You'll need to call stop() after calling convert().

saudet avatar Feb 02 '24 04:02 saudet

And after calling cvShowImage().

saudet avatar Feb 03 '24 02:02 saudet

Thank you for the specific answers. But I still can't get frames converted to IplImages. Here is some new code that focuses on the specific problem... I have two int control variables: doBuf and doIpl. They control whether I want to extract a video frame into a BufferedImage or an IplImage. If I set doBuf= 1; and doIpl = 0; then the code runs and correctly displays a very large full color image from the video frame. However, if I set doBuf= 0; and doIpl = 1; then the code runs but erroneously displays a fairly small monotone dark gray image that has no relation to the video. The two sections of code are NOT identical. But they are as similar as I can make them. I have no idea why one works and the other doesn't. Is there some easy fix that I'm overlooking, or do I have to use BufferedImages and give up on IplImages? Video.txt

Haprst avatar Feb 04 '24 04:02 Haprst

Like I said, you'll need to move stop() and close() after cvShowImage() for this to work. It could also work if you clone() the image, but still again always before calling stop() and close().

saudet avatar Feb 04 '24 08:02 saudet

I don't know whether to say Eureka, Hallelujah, or simply Thank You. My problem was that when you said the position of close() was essential, I didn't realize you were referring to converter.close(). I understand now.

Haprst avatar Feb 04 '24 22:02 Haprst