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