[learning opencv] 学习笔记一

来源:互联网 发布:数据分析师有前途吗 编辑:程序博客网 时间:2024/06/10 07:27

这篇笔记记录的是  <<learning opencv>>中的前几个样例.


环境为:Win 10 64位 + vs 2015 社区版 + opencv2.4.9

Demo 0. 读入一张图片并显示在屏幕中.

#include "highgui.h"int main(int argc, char ** argv){IplImage * img = cvLoadImage(argv[1]); // 载入图片cvNamedWindow("Demo_0", CV_WINDOW_AUTOSIZE); /*建立一个名为"Demo_0"的窗口并自动设置大小the image will be scaled tofit within the window */cvShowImage("Demo_0", img);// 在"Demo_0"中显示图片cvWaitKey(0);// 等待输入(本示例中按下任意键退出程序cvReleaseImage(&img); // 释放内存cvDestroyWindow("Demo_0"); // 关闭窗口释放内存return 0;}
属性要这样配置一下~argv[1] 就是 "D:\Test.jpg"这个文件

运行结果:


Demo_1. 播放avi视频
可以参考这篇博客一些opencv中的数据结构

#include "highgui.h"int main(int argc, char ** argv){cvNamedWindow("Demo_1",CV_WINDOW_AUTOSIZE);CvCapture * cp = cvCreateFileCapture(argv[1]); /* 目前只知道这是一个结构体,包含将要载入的avi所有信息.This structure contains all of the information about the AVI file                 being read,including state information. *//*CvCapture * cp = cvCaptureFromAVI(argv[1]);*/IplImage * fr;while (1) {fr = cvQueryFrame(cp); // 抓取cvcapture中的一帖图像if (!fr) break;cvShowImage("Demo_1", fr);char c = cvWaitKey(33);if (c == 27) break;// ESC 键}cvReleaseCapture(&cp);cvDestroyWindow("Demo_1");return 0;}
Demo 2.为demo 1 添加进度条
书上的代码是这样的~效果看起来和常见的进度条区别很大~囧~_~ 
// 书上的代码#include "cv.h"#include "highgui.h"int g_slider_position = 0;CvCapture * g_capture = NULL;void onTrackbarSlide(int pos) {cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);}int main(int argc, char** argv) {cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);g_capture = cvCreateFileCapture(argv[1]);int frames = (int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);if (frames != 0) {cvCreateTrackbar("Position","Example3",&g_slider_position,frames,onTrackbarSlide);}IplImage* frame;while (1) {frame = cvQueryFrame(g_capture);if (!frame) break;cvShowImage("Example2", frame);char c = cvWaitKey(33);if (c == 27) break;}cvReleaseCapture(&g_capture);cvDestroyWindow("Demo_2");return 0;}



效果是这样的~~~如果不手动改变进度条的位置的话,它就一直待在那不动~点了一下它跑到新的位置又不动了~也就是说进度条的位置只有在刚开始和自己改变位置的时候才能和视频同步我自己瞎写了一下~以后再回来改吧
#include "cv.h"#include "highgui.h"CvCapture * g_cp = NULL;int g_slider_pos = 0;// 开始位置void onTrackbarSlide(int pos){//std::cout << "此函数执行了" << std::endl;cvSetCaptureProperty(g_cp, CV_CAP_PROP_POS_FRAMES, pos);}int main(int argc, char ** argv){cvNamedWindow("Demo_2", CV_WINDOW_AUTOSIZE);g_cp = cvCreateFileCapture(argv[1]);int totframes = cvGetCaptureProperty(g_cp, CV_CAP_PROP_FRAME_COUNT);if (totframes != 0) {cvCreateTrackbar("pos", "Demo_2", &g_slider_pos,totframes,onTrackbarSlide);}IplImage * img;int cur_pos;while (1) {img = cvQueryFrame(g_cp);if (!img) break;cvShowImage("Demo_2", img);cur_pos = (int)cvGetCaptureProperty(g_cp, CV_CAP_PROP_POS_FRAMES);cvSetTrackbarPos("pos","Demo_2",cur_pos);char c = cvWaitKey(33);if (c == 27) break;}cvReleaseCapture(&g_cp);cvDestroyWindow("Demo_2");return 0;}






0 0
原创粉丝点击