日志
OpenCV Ubuntu Qt
2012-04-24 15:05
转载自:http://hi.baidu.com/mehewen/blog/item/3f44d16c21e6cbe9431694b8.html
Ubuntu下的安装: (1)下载更新软件包 apt-get update (2)查询OpenCV相关软件包 apt-cache search opencv (3)安装相关软件包 2.将OpenCV库加入到qtcreator里 我的命令是 sudo gedit /usr/share/qt4/mkspecs/default/qmake.conf 在文件内添加了下面两句: QMAKE_INCDIR = /usr/include/opencv QMAKE_LIBS = -lcvaux -lcv -lcxcore -lhighgui -lml 3.用Qt编写OpenCV程序 在qt的工程文件(*.pro)内添加: INCLUDEPATH += /usr/include/opencv LIBS += /usr/lib/libcv.so \ /usr/lib/libcvaux.so \ /usr/lib/libcxcore.so \ /usr/lib/libhighgui.so \ /usr/lib/libml.so 如求方便,可以直接将上面添加的INCLUDEPATH和LIBS内容添加到 sudo gedit /usr/share/qt4/mkspecs/default/qmake.conf里, 这样以后就不用在每个工程里配置了,不过移植的时候就需要注意了。 4.实例 main.cpp(工程内的其他文件内容不变): #include <QtGui/QApplication> #include "widget.h" #include <cv.h> #include <highgui.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #define NUM_FRAME 300 void Video_to_image(char* filename) { printf("------------- video to image ... ----------------\n"); //初始化一个视频文件捕捉器 CvCapture* capture = cvCaptureFromAVI(filename); //获取视频信息 cvQueryFrame(capture); int frameH = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT); int frameW = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH); int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); // printf("\tvideo height : %d\n\tvideo width : %d\n\tfps : %d\n\tframe numbers : %d\n", frameH, frameW, fps, numFrames); //定义和初始化变量 int i = 0; IplImage* img = 0; char image_name[13]; cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE ); //读取和显示 while(1) { img = cvQueryFrame(capture); //获取一帧图片 cvShowImage( "mainWin", img ); //将其显示 char key = cvWaitKey(20); sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");//保存的图片名 cvSaveImage( image_name, img); //保存一帧图片 if(i == NUM_FRAME) break; } cvReleaseCapture(&capture); cvDestroyWindow("mainWin"); } void Image_to_video() { int i = 0; IplImage* img = 0; char image_name[13]; printf("------------- image to video ... ----------------\n"); //初始化视频编写器,参数根据实际视频文件修改 CvVideoWriter *writer = 0; int isColor = 1; int fps = 30; // or 25 int frameW = 400; // 744 for firewire cameras int frameH = 240; // 480 for firewire cameras writer=cvCreateVideoWriter("out.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(frameW,frameH),isColor); printf("\tvideo height : %d\n\tvideo width : %d\n\tfps : %d\n", frameH, frameW, fps); //创建窗口 cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE ); while(i<NUM_FRAME) { sprintf(image_name, "%s%d%s", "image", ++i, ".jpg"); img = cvLoadImage(image_name); if(!img) { printf("Could not load image file...\n"); exit(0); } cvShowImage("mainWin", img); char key = cvWaitKey(20); cvWriteFrame(writer, img); } cvReleaseVideoWriter(&writer); cvDestroyWindow("mainWin"); } int main(int argc, char *argv[]) { QApplication a(argc, argv); char filename[13] = "cube4.avi"; //cube4.avi放在工程目录下 Video_to_image(filename); //视频转图片 Image_to_video(); //图片转视频 return a.exec(); } |