cvCreateFileCapture异常错误

cvCreateFileCapture异常错误,c,opencv,video-capture,samba,C,Opencv,Video Capture,Samba,我试图用C语言创建一个简单的Opencv程序,它从.avi创建一个文件捕获,并在一个突出显示面的窗口中播放。我正在运行一个自编版本的Opencv(我已经用jpeg图像尝试了同样的方法,并且效果很好) 建筑进展顺利,没有错误,没有警告,但当我启动它时,控制台输出如下: 遇到未知参数:“服务器角色” 忽略未知参数“服务器角色” 然后程序就停止了 以前它抱怨缺少/home/#user/.smb/smb.conf文件,所以我尝试安装samba(尽管我仍然不知道samba在这一切中要做什么) 这是我的密码

我试图用C语言创建一个简单的Opencv程序,它从.avi创建一个文件捕获,并在一个突出显示面的窗口中播放。我正在运行一个自编版本的Opencv(我已经用jpeg图像尝试了同样的方法,并且效果很好)

建筑进展顺利,没有错误,没有警告,但当我启动它时,控制台输出如下:

遇到未知参数:“服务器角色” 忽略未知参数“服务器角色”

然后程序就停止了

以前它抱怨缺少/home/#user/.smb/smb.conf文件,所以我尝试安装samba(尽管我仍然不知道samba在这一切中要做什么)

这是我的密码:

main(){


现在它成功地加载了视频并查询了一帧,每次我按下一个键,它显然会查询另一帧,一切正常,但是如果我对waitkey()进行注释程序只是挂起一点,然后崩溃。如果我试图关闭窗口,我开始认为编解码器或类似的东西有问题…

代码中有太多潜在的问题,大多数都与不进行防御性编码有关

cvWaitKey(0);
cvNamedWindow()之后做什么?
不需要,请删除它

如果捕获不成功怎么办?防御代码:

CvCapture*capture=cvCreateFileCapture(“monsters.avi”); 如果(!捕获) { //未找到文件,请处理错误并可能退出应用程序 }

对于从OpenCV接收到的每个指针,都应该使用这种技术,好吗

主要问题之一是,在循环之前为
CvMemStorage
分配内存,但在循环内部释放内存,这意味着在第一次循环迭代之后,将不再有有效的
CvMemStorage*存储
,这是一个巨大的问题


要么将分配过程移到循环的开头,以便在每次迭代时分配/释放内存,要么将
cvreleasemstorage(&storage);
调用移出循环。

现在它工作正常,我用这个命令更改了cvWaitKey()

   if(waitKey(30) >= 0) break;
我不明白为什么,但现在一切都正常了:)

int main(){
namedWindow("Video", CV_WINDOW_FREERATIO);

VideoCapture cap("sintel.mp4");
 if(!cap.isOpened())  // check if we succeeded
        return -1;

Mat edges;
for(;;){


    Mat frame;
    cap>>frame;
    cvtColor(frame, edges, CV_BGR2GRAY);
    GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
    Canny(edges, edges, 0, 30, 3);

    imshow("Video", edges);
    //cvWaitKey(0);

}


return(0);
}
   if(waitKey(30) >= 0) break;