opencv学习3
来源:互联网 发布:弱肉强食知乎 编辑:程序博客网 时间:2024/06/05 20:58
动态调整窗口大小并进行灰度变换
代码如下:
#include "stdafx.h"#include <cv.h>#include <highgui.h>const char* Title="avi视频播放并自定义窗口大小";const char* GrayTitle="可变窗口";IplImage *Image;IplImage *GrayImage;CvCapture *avi;CvSize GrayImageSize;bool WindowChangeFlag=FALSE;//滑块回调函数void OnChange(int pos){//改变窗口标志位置位WindowChangeFlag=true;}int _tmain(int argc, _TCHAR* argv[]){double AVI_FrameCount;int DelayTime_ms;int WindowSize=100;//加载aviavi=cvCaptureFromAVI("Javaw.avi");if(avi==0)//文件不支持{printf("加载视频错误!\r\n");system("pause");return 0;}//获取视频帧率AVI_FrameCount=cvGetCaptureProperty(avi,CV_CAP_PROP_FPS);//获取每一帧的延时时间DelayTime_ms=1000/(int)AVI_FrameCount;//创建窗口cvNamedWindow(Title,CV_WINDOW_AUTOSIZE);cvNamedWindow(GrayTitle,CV_WINDOW_AUTOSIZE);//创建一个滑动块cvCreateTrackbar("调节窗口大小",Title,&WindowSize,150,OnChange);//获取视频1帧的图像Image=cvQueryFrame(avi);//设置尺寸GrayImageSize.height=Image->height;GrayImageSize.width=Image->width;//创建临时灰度转换容器IplImage* _tGrayImage=cvCreateImage(GrayImageSize,IPL_DEPTH_8U,1);//给灰度图创建一个图片容器GrayImage=cvCreateImage(GrayImageSize,IPL_DEPTH_8U,1);while(Image){if(WindowChangeFlag)//检测窗口改变标志位{WindowChangeFlag=FALSE;//删除掉原来的cvReleaseImage(&GrayImage);//重新计算尺寸GrayImageSize.height=Image->height*WindowSize/100;GrayImageSize.width=Image->width*WindowSize/100;//创建一个新的容器GrayImage=cvCreateImage(GrayImageSize, IPL_DEPTH_8U, 1);}//转换为灰度图cvCvtColor(Image,_tGrayImage,CV_RGB2GRAY);//缩放图片 (CV_INTER_LINEAR:使用象素关系重采样)cvResize(_tGrayImage,GrayImage,CV_INTER_LINEAR);//显示图片cvShowImage(Title,Image);cvShowImage(GrayTitle,GrayImage);//帧延时cvWaitKey(DelayTime_ms);//获取视频1帧的图像Image=cvQueryFrame(avi);}//等待任意按键cvWaitKey();//销毁窗口cvDestroyWindow(Title);cvDestroyWindow(GrayTitle);//释放占用的资源cvReleaseImage(&Image);cvReleaseImage(&_tGrayImage);cvReleaseImage(&GrayImage);cvReleaseCapture(&avi);return 0;}
效果:
这次主要用到了几个新的函数
在窗口上创建滑动块、彩色图转灰度图、修改图片尺寸
窗口上创建滑动块函数
CVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,
int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));
int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));
参数1 trackbar_name:滑块名称
参数2window_name:显示到窗口名称
参数3value:滑块初始位置
参数4 count :滑块最大值
参数5 on_change :void (*)(int)型回调函数,当滑块改变时就会调用传入的函数地址
彩色图转灰度图函数
CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code );
参数1 src:源图片
参数2 dst:目标容器
参数3 code:转换类型
类型有:
CV_BGR2GRAY
CV_RGB2GRAY
CV_GRAY2BGR
CV_GRAY2RGB
CV_GRAY2BGRA
CV_GRAY2RGBA
CV_BGRA2GRAY
CV_RGBA2GRAY
CV_RGB2GRAY
CV_GRAY2BGR
CV_GRAY2RGB
CV_GRAY2BGRA
CV_GRAY2RGBA
CV_BGRA2GRAY
CV_RGBA2GRAY
修改图片尺寸函数
CVAPI(void) cvResize( const CvArr* src, CvArr* dst,
int interpolation CV_DEFAULT( CV_INTER_LINEAR ));
int interpolation CV_DEFAULT( CV_INTER_LINEAR ));
参数1 src:源图片
参数2 dst:目标容器
参数3 interpolation:转换类型
转换类型有:
CV_INTER_NN最近-邻居插补
CV_INTER_LINEAR双线性插值(默认方法)
CV_INTER_AREA 像素面积相关重采样。当缩小图像时,该方法可以避免波纹的出现。当放大图像时,类似于方法CV_INTER_NN
CV_INTER_CUBIC 双三次插值
CV_INTER_LANCZOS4 8×8的Lanczos插入方法
CV_INTER_LINEAR双线性插值(默认方法)
CV_INTER_AREA 像素面积相关重采样。当缩小图像时,该方法可以避免波纹的出现。当放大图像时,类似于方法CV_INTER_NN
CV_INTER_CUBIC 双三次插值
CV_INTER_LANCZOS4 8×8的Lanczos插入方法
0 0
- OpenCV学习(3) OpenCV框架
- opencv学习3
- opencv学习笔记3
- OpenCV学习之3
- OpenCV学习日记3
- OpenCV学习日记3
- 【opencv学习笔记】3、opencv图像二值化
- 《学习OpenCV》第二章(3)
- 《学习OpenCV》练习3-2
- 《学习OpenCV》练习3-4
- 《学习OpenCV》练习3-5
- 《学习OpenCV》练习3-6
- 《学习OpenCV》练习3-7
- 《学习OpenCV》练习4-3
- 《学习OpenCV》练习7-3
- Opencv学习笔记3--形态学
- [OpenCV]Opencv学习日记
- opencv学习
- tomcat调试maven2项目
- Girl_iOS100天学iOS的第十四天(MagicalRecord)
- glfw can't get window
- 2012 TCO Algorithm Round 3A - Division I, Level Two FoxAndCake
- 如何检查GATHER_STATS_JOB任务的执行情况
- opencv学习3
- Android Weak Handler:可以避免内存泄漏的Handler库
- GridView 设置setOnItemClickListener点击事件不响应
- Android Touch事件分发过程
- [Hb-V] 编写 调试具有多个段的程序
- HDU3487(splay区间翻转+区间切割)
- Scala基本语法与概念笔记
- MyEcilipse Web导入jdbc
- 深入Java单例模式