我正在使用opencv来检测闪烁。我能够使用从相机捕获的流来运行我的项目,一切都很好。我试图在* .avi文件的数据库上测试我的算法,但我无法打开任何这些。我检查了这些的编解码器版本并下载了正确的编解码器,但它仍然无法正常工作。 我决定尝试至少尝试加载剪辑,使用我在互联网上找到的代码:
int main( int argc, char** argv ){
int key = 0;
// Initialize camera and OpenCV image
//CvCapture* capture = cvCaptureFromCAM( 0 );
CvCapture* capture = cvCaptureFromAVI( "file.avi" );
IplImage* frame = cvQueryFrame( capture );
// Check
if ( !capture )
{
fprintf( stderr, "Cannot open AVI!\n" );
return 1;
}
// Get the fps, needed to set the delay
int fps = ( int )cvGetCaptureProperty( capture, CV_CAP_PROP_FPS );
// Create a window to display the video
cvNamedWindow( "video", CV_WINDOW_AUTOSIZE );
while( key != 'x' )
{
// get the image frame
frame = cvQueryFrame( capture );
// exit if unsuccessful
if( !frame ) break;
// display current frame
cvShowImage( "video", frame );
// exit if user presses 'x'
key = cvWaitKey( 1000 / fps );
}
// Tidy up
cvDestroyWindow( "video" );
cvReleaseCapture( &capture );
return 0;
}
但它仍然没有改变任何东西, capture 仍然是一个NULL。有什么想法,我现在可以做什么? 提前谢谢!
E:我在x64 windows上使用opencv 2.4.6
答案 0 :(得分:0)
代码似乎是正确的。
您将问题标记为C ++,但IplImage源自英特尔图像处理库,是本机OpenCV C库的一部分。在OpenCV C ++库中,我猜没有IplImage(或者不应该使用),你必须使用cv::Mat
。
关于问题: 您确定使用正确的ffmpeg(或任何其他视频库)支持编译OpenCV吗?确保已安装所需的编解码器,然后使用必要的标志重新编译opencv。可能有帮助。
确保opencv安装cmake的输出包含类似的文本:
found gstreamer-base-0.10
GTK+ 2.x: YES
FFMPEG: YES
GStreamer: YES
V4L/V4L2: Using libv4l
PS。 FFMPEG:是
答案 1 :(得分:0)
答案 2 :(得分:0)
我猜不是安装了正确的编解码器。我们需要按照OpenCV http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html的建议安装正确的编解码器。检查VideoWriter :: VideoWriter部分。我们需要FOURCC在http://www.fourcc.org/codecs.php处使用视频编解码器。小心。安装可能会安装垃圾以及编解码器。并非所有编解码器都被识别。至少现在我有mpeg4和DivX,可以打开Megamind.avi,由OpenCV自己的演示程序使用。