我认为我的问题非常基本,但我在OpenCV中编写此代码,只是从网络摄像头捕获视频数据并将其保存到文件中。现在的问题是文件是在所需的目的地进行的,它最初的大小约为286字节。然后,当我将第一帧分配给指针时,大小增加到414字节。但是,当我运行整个代码时,保存的视频的大小仍然是414字节。当然,因此我的媒体播放器无法播放该文件并说“不是QuickTime Player理解的格式”。 VLC播放器也是如此。
以下是我的相同代码:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
int main( int argc, char** argv ) {
CvCapture* capture;
capture = cvCreateCameraCapture(0);
assert( capture != NULL );
IplImage* bgr_frame = cvQueryFrame( capture );
CvSize size = cvSize(
(int)cvGetCaptureProperty( capture,
CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty( capture,
CV_CAP_PROP_FRAME_HEIGHT)
);
cvNamedWindow( "Webcam", CV_WINDOW_AUTOSIZE );
CvVideoWriter *writer = cvCreateVideoWriter( "/Users/user/Desktop/OpenCV_trial/OpenCV_trial/vidtry.AVI",
CV_FOURCC('D','I','V','X'),
30,
size
);
while( (bgr_frame = cvQueryFrame( capture )) != NULL )
{
cvWriteFrame(writer, bgr_frame );
cvShowImage( "Webcam", bgr_frame );
char c = cvWaitKey( 33 );
if( c == 27 ) break;
}
cvReleaseVideoWriter( &writer );
cvReleaseCapture( &capture );
cvDestroyWindow( "Webcam" );
return( 0 );
}
我不知道为什么会这样。我正在使用mac OSX Lion并运行Xcode。
以前有人遇到过这个问题吗?如果是这样,我该如何解决?
谢谢!
-Yash
答案 0 :(得分:2)
嗨,我想我找到了问题的答案。
正如Velthune所建议的那样,它似乎是一个编解码器问题,MAC OS只能运行其中的几个。这是所有工作的链接: List of QuickTime codecs supported by the mac os port
并非所有列出的编解码器都可以工作。在我尝试的那些中,只有WRLE似乎有效。
非常感谢Velthune。 -Yash
答案 1 :(得分:1)
您是否尝试使用其他播放器打开文件?例如VLC ..
这是因为Quicktime和.avi不能相处得很好。
查看苹果documentation。
否则尝试更改视频编解码器,这是opencv reference。
答案 2 :(得分:0)
实际上我也试图这样做。但是我在Windows 7中尝试了Visual C ++(Express Edition)。但在这种情况下,我们需要添加额外的标题为“#include”stdafx.h“并确保存在保存文件的链接。例如我修改的代码如下:
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
int main( int argc, char** argv ) {
CvCapture* capture;
capture = cvCreateCameraCapture(0);
assert( capture != NULL );
IplImage* bgr_frame = cvQueryFrame( capture );
CvSize size = cvSize(
(int)cvGetCaptureProperty( capture,
CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty( capture,
CV_CAP_PROP_FRAME_HEIGHT)
);
cvNamedWindow( "Webcam", CV_WINDOW_AUTOSIZE );
CvVideoWriter *writer = cvCreateVideoWriter("D:/vidtry.AVI",CV_FOURCC('D','I','V','X'),15,size);
while( (bgr_frame = cvQueryFrame( capture )) != NULL )
{
cvWriteFrame(writer, bgr_frame );
cvShowImage( "Webcam", bgr_frame );
char c = cvWaitKey( 33 );
if( c == 27 ) break;
}
cvReleaseVideoWriter( &writer );
cvReleaseCapture( &capture );
cvDestroyWindow( "Webcam" );
return( 0 );
}