我需要逐帧捕获存储在Android设备的SD卡中的视频(在本例中为我的模拟器)。我通过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(捕获)结果总是错误的。 有任何建议正确打开视频并抓住帧吗? 提前致谢
答案 0 :(得分:0)
某些版本的OpenCV(在opencv2包中)构建时没有视频支持。如果是你的情况,你必须在pkg的Makefile中启用“-D WITH_FFMPEG = ON”并重新编译。
查看"Displaying AVI Video using OpenCV"教程:
“您可能需要确保已成功安装ffmpeg,以便允许以不同格式进行视频编码和视频解码。没有ffmpeg功能可能会在尝试运行此简单示例时产生问题并产生编译错误”。
同时检查cvCaptureFromAVI中的路径是否正确。
希望这会有所帮助!
答案 1 :(得分:0)
您正在观察的行为可能是由于cvCaptureFromAVI()
失败。你需要安全地开始编码并检查你所做的电话的回复:
CvCapture* capture = cvCaptureFromAVI("/mnt/sdcard/SinglePerson.avi");
if (!capture)
{
printf("!!! Failed to open video\n\7");
exit(0);
}
此功能通常因以下两个原因失败:
如果您不熟悉OpenCV,我建议您首先在桌面(PC)上测试OpenCV代码。