learning OpenCV(2)

1.显示图像
2.播放AVI视频
3.视频播放控制
4. 图像变换
5. 摄像机读入数据
6.写入AVI视频文件












//2-1读入图像函数                                                                                                                    IplImage* img = cvLoadImage( argv[1] ); //将图片加载至内存 ,将命令行参数替代为字符串,不能读入
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE ); /*创建一个窗口,第二个参数默认为0(窗口大小不会因图像大小而改变),可为1(CV_WINDOW_AUTOSIZE)窗口根据图像实际大小自动进行拉伸或缩放   设为0时可以自行修改窗口的大小,如 cvResizeWindow("Example1",img->width/5, img->height/5); */
cvShowImage("Example1", img );//显示图像
char cvWaitKey(0);/*这句一定要有,使程序暂停,等待用户处打一个按键操作,参数为0或者负数时,程序一直等待;如果期间用户按键,则c被置为该键的ASC码,否则为-1;*/
cvReleaseImage( &img );//释放图像文件分配的内存 cvDestroyWindow("Example1");//销毁窗口
                                                                                                                                                           
//2-2读入视频函数                                                                                                                                         CvCpature* capture = cvCreateFileCapture(argv[1]);//获得AVI数据结构的指针,包括状态信息
IplImage* frame = cvQureyFrame(capture);//将下一帧视频载入内存,返回一个对应当前帧的指针;
cvSetCaptureProperty(g_capture  AVI数据结构, CV_CAP_PROP_POS_FRAMES, pos整数类型);//在滚动条被拖动时被调用
int frames = (int) cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);//查询总帧数
cvCreateTrackBar("position", "Exaple3", int &g_slider_position, int frames, onTrackbarSlide在滚动条被拖动时调用);

//2-4图像平滑处理
IplImage * out = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);//创建一个新的图像结构,大小,深度,通道数
cvSmoth(image, out, CV_GAUSSIA, 3, 3);//每个像素周围3×3的区域进行高斯平滑处理
//2-5/6 图像下采样,canny边界检测检测
createImage(cvSize(in->width, in->height, in->depth, int->depth, in->nChannels);//构造函数 
cvPyrDown(in, out);//图像下采样,输出图像是输入图像的一半                                                                                                 void cvCanny( const CvArr* image, CvArr* edges, double threshold1,  double threshold2, int aperture_size=3 );//边缘检测只接受单通道图像
//2-9摄像头读入文件
CvCapture * cvCreate = cvCreateFileCapture(int id);

学习过程中注意的地方:

1. cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE );   参数2设为0时可以自行修改窗口的大小,如 cvResizeWindow("Example1",img->width/5, img->height/5);设置为1时不能修改窗口的大小

2. char cvWaitKey(0);//这句一定要有,不然读不出文件

3. 彩色图转灰度图的函数和边缘检测的函数两个参数都要求单通道,且输入输出图像大小要求一致

 cvConvertImage(   //We never make use of this gray image
            bgr_frame,
            gray_frame,
            CV_RGB2GRAY
        );//参数二要求为单通道

4.int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );函数和cvGetproperty函数 double cvGetCaptureProperty( CvCapture* capture, int property_id );

标识符 property_id的意义:

CV_CAP_PROP_POS_MSEC - 从文件开始的位置,单位为毫秒
CV_CAP_PROP_POS_FRAMES - 单位为帧数的位置(只对视频文件有效)
CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FRAME_WIDTH -  视频流的帧宽度(只对摄像头有效)
CV_CAP_PROP_FRAME_HEIGHT -  视频流的帧高度(只对摄像头有效)
CV_CAP_PROP_FPS - 帧率(只对摄像头有效)
CV_CAP_PROP_FOURCC - 表示codec的四个字符(只对摄像头有效)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值