CvCaptureFromAVI问题 – OpenCV Android
我需要逐帧捕获存储在Android设备的SD卡中的video(在本例中为我的模拟器)。 我通过NDK使用Android和OpenCV。 我通过DDBS(eclipse)的文件浏览器在sdcard中手动推送文件“SinglePerson.avi”,我使用下面的代码来读取文件:
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial4_Sample4Mixed_VideoProcessing(JNIEnv*, jobject) { LOGI("INSIDE VideoProcessing "); CvCapture* capture = cvCaptureFromAVI("/mnt/sdcard/SinglePerson.avi"); IplImage* img = 0; if(!cvGrabFrame(capture)){ // capture a frame LOGI("Inside the if"); printf("Could not grab a frame\n\7"); exit(0); } img=cvRetrieveFrame(capture);// retrieve the captured frame cvReleaseCapture(&capture); }
问题是cvGrabFrame(捕获)结果总是错误的。 有任何建议正确打开video并抓住帧吗? 提前致谢
某些版本的OpenCV(在opencv2包中)构建时没有video支持。 如果是你的情况,你必须在pkg的Makefile中启用“-D WITH_FFMPEG = ON”并重新编译。
查看“使用OpenCV显示AVIvideo”教程:
“您可能需要确保已成功安装ffmpeg,以便允许以不同格式进行video编码和video解码。在尝试运行此简单示例并产生编译错误时,没有ffmpegfunction可能会导致问题”。
还要检查cvCaptureFromAVI中的路径是否正确。
希望这会有所帮助!
您正在观察的行为可能是由于cvCaptureFromAVI()
失败。 您需要安全地开始编码并检查您所做的呼叫的返回:
CvCapture* capture = cvCaptureFromAVI("/mnt/sdcard/SinglePerson.avi"); if (!capture) { printf("!!! Failed to open video\n\7"); exit(0); }
此function通常失败有两个原因:
- 当它无法访问该文件时(由于文件系统权限错误);
- 系统上缺少编解码器(OpenCV不支持video格式)。
如果您是OpenCV的新手,我建议您首先在桌面(PC)上测试您的OpenCV代码。