【问题标题】:Opencv gives me an unclear camera captureOpencv给了我一个不清楚的相机捕捉
【发布时间】:2014-05-01 09:58:25
【问题描述】:

我在 netbeans 6.9 IDE 中使用 Opencv 2.0,我的操作系统是 windows 7 64bit。当我尝试从实时提要中捕获帧时,我得到了一个不清楚的输出。

我的笔记本电脑摄像头(Acer 水晶眼)在其他方面工作良好。我尝试使用 USB 相机(罗技)但给出了相同的结果。下面是我正在使用的简单代码。

#include <stdio.h>   
#include <stdlib.h>
#include <cv.h>
#include <highgui.h>


int main(int argc, char** argv) {    
    CvCapture *video = cvCaptureFromCAM(0);
    IplImage * img = cvQueryFrame(video);

if(!cvGrabFrame(video)){
    printf("could not grab a frame\n");
    exit(0);
}

cvNamedWindow("original_image",0);

cvShowImage("original_image",img);

cvWaitKey(0);

cvReleaseImage(&img);

cvReleaseCapture(&video);

return (EXIT_SUCCESS);

}

如果有人可以帮助我解决这个问题,那将是一个很大的帮助,因为我被困在一个项目中而没有继续进行。提前致谢

【问题讨论】:

  • 请让这个世界变得更美好,改用opencv的c++ api
  • 你的意思是我使用的是c语言而不是c++
  • 不,这不是问题所在。尽管如此,旧的 c-api 已经死去。不要将其用于新项目
  • 视频根本没有播放。您只显示第一帧。当第一帧被捕获时,相机正在初始化并且“看到”一切都不清楚。您必须循环播放视频才能到达下一帧。检查我的答案here
  • 玩转你的相机设置(对比度、曝光、亮度)。您所描述的似乎不是 openCV 问题。

标签: c opencv netbeans-6.9


【解决方案1】:

您的代码仅显示流的第一帧。打开视频流后,您应该创建一个循环,从流中获取一个新帧并显示它。在你的情况下,它会变成这样:

int main(int argc, char** argv) 
{
    CvCapture *video = cvCaptureFromCAM(0);

    if(!cvGrabFrame(video)) \\check if the video can be queried for frames
    {
        printf("could not grab a frame\n");
        exit(0);
    }

    cvNamedWindow("original_image",0); \\make your output window

    while(1)
    {
        IplImage * img = cvQueryFrame(video); \\get the next frame from the stream

        cvShowImage("original_image",img); \\show the image in the output window

        if(cvWaitKey(0) == 27) \\if escape key is pressed, exit the loop
        {
            break;
        }
    }

    cvReleaseImage(&img);
    cvReleaseCapture(&video);
    return (EXIT_SUCCESS);
}

【讨论】:

  • 谢谢埃里克...这对我有用。我也尝试将其他帧循环播放。但无论如何它对我不起作用。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2017-02-10
  • 2020-10-19
  • 1970-01-01
  • 2018-10-30
  • 2018-03-18
相关资源
最近更新 更多