【发布时间】:2012-03-02 11:22:51
【问题描述】:
我正在尝试在 C 中创建一个简单的 Opencv 程序,该程序从 .avi 创建文件捕获,并在突出显示面孔的窗口中播放它。我正在运行 Opencv 的自编译版本(我已经用 jpeg 图像尝试过同样的方法,它可以工作)。
构建顺利,没有错误,没有警告,但是当我启动它时,控制台输出:
遇到未知参数:“服务器角色” 忽略未知参数“服务器角色”
然后程序就停止了
以前它抱怨缺少 /home/#user/.smb/smb.conf 文件,所以我尝试安装 samba(尽管我仍然不知道 samba 在这一切中必须做什么)
这是我的代码:
main(){
printf("Ciao!");
cvNamedWindow("window", CV_WINDOW_AUTOSIZE);
cvWaitKey(0);
printf("ok");
CvCapture* capture = cvCreateFileCapture("monsters.avi");
CvHaarClassifierCascade* cascade = load_object_detector("haarcascade_frontalface_alt.xml");
CvMemStorage* storage = cvCreateMemStorage(0);
//List of the faces
CvSeq* faces;
while (0<10) {
CvArr* image = cvQueryFrame(capture);
double scale = 1;
faces = cvHaarDetectObjects(image,cascade, storage, 1.2, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(1,1), cvSize(300,300));
int i;
for(i = 0; i < faces->total; i++ )
{
CvRect face_rect = *(CvRect*)cvGetSeqElem( faces, i );
cvRectangle( image,
cvPoint(face_rect.x*scale,face_rect.y*scale),
cvPoint((face_rect.x+face_rect.width)*scale,(face_rect.y+face_rect.height)*scale),
CV_RGB(255,0,0) , 3, 8, 0);
}
cvReleaseMemStorage( &storage );
cvShowImage("window", image);
}
cvWaitKey(0);
printf("Ciao!");
}
感谢您的回答,我已切换到 C++ 进行试用。现在我这样做了:
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);
}
现在它成功加载视频并查询一个帧,每次我按下一个键它显然会查询另一个帧并且一切正常,但如果我评论 waitkey() 程序只是挂起一点,如果我尝试崩溃关闭窗口,我开始认为编解码器或类似的东西有问题......
【问题讨论】:
标签: c opencv video-capture samba