我将在MFC项目中使用opencv从网络摄像头写AVI文件,但它没有写

时间:2016-10-25 03:30:37

标签: c++ opencv mfc

我正在使用网络摄像头监控功能修改程序。我必须添加一个从网络摄像头写入* .avi文件的功能。我在CMainForm类中添加了一些成员变量和代码。

下面的代码是添加成员变量;

CvVideoWriter* m_Writer;
IplImage* m_Image;
CvCapture* m_Capture;
bool m_bAviWriting;    // Checks whether avi file is being written

我在单击“开始”按钮时修改了一个函数实现。我将局部变量替换为新的成员变量。

...
m_Capture = cvCaptureFromCAM(m_nCameraNumber);
    if (m_Capture == NULL)
        return FALSE;

    m_Image = 0;

    m_Image = cvQueryFrame(m_Capture);
    m_Image = cvQueryFrame(m_Capture);
    m_Image = cvQueryFrame(m_Capture);

    // Create file
    if (!m_bAviWriting) {
        m_Capture = cvCaptureFromCAM(m_nCameraNumber);
        m_Image = cvQueryFrame(m_Capture);
        CvSize size = cvSize((int)cvGetCaptureProperty(m_Capture, CV_CAP_PROP_FRAME_WIDTH),
            (int)cvGetCaptureProperty(m_Capture, CV_CAP_PROP_FRAME_HEIGHT));
        m_Writer = cvCreateVideoWriter("writehere.avi", CV_FOURCC('D', 'V', 'I', 'X'), 30.0, size);

        m_bAviWriting = true;

并添加了一个在CxxxView :: OnDraw()执行时执行的函数。

void CMainFrame::WriteAvi()
{
    m_ImgForFile = cvQueryFrame(m_CaptureForFile);
    if (!m_ImgForFile) return;
    if (m_Writer == NULL) {
        m_Writer = cvCreateVideoWriter("writehere.avi", CV_FOURCC('D', 'V', 'I', 'X'), 30.0, cvGetSize(m_ImgForFile), 1);
    }
    cvShowImage("rspWindow", m_ImgForFile);
    cvWriteFrame(m_Writer, m_ImgForFile);
}

最后,在单击“停止”按钮时执行修改的函数。

if (m_bAviWriting) {
    cvReleaseVideoWriter(&m_Writer);
    cvReleaseCapture(&m_Capture);
    m_bAviWriting = false;
}

当这个程序运行时,空白文件" writehere.avi"已创建,但内容未写入。在debbuging期间,我发现m_Writer实例始终具有null值,但我无法发现原因。

0 个答案:

没有答案