//从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中
//作者:sandy
//时间:2015-10-10
#include <cv.h>
#include <highgui.h> #include<stdarg.h>
#include <iostream>
void showThreeImage(char *title,int num,...){
//声明变量
IplImage *img;
IplImage *dispImg;
int i,m,n;
//创建image,大小960*300,8位无符号,3通道
dispImg = cvCreateImage(cvSize(, ), , ); va_list args;//【定义不定参数列表args】
va_start(args,num);//【获得第一个可变参数地址】
for(i=,m=,n=;i<num;i++,m+=){
img = va_arg(args,IplImage*);//【读取一个IplImage类型的,args指向下一个】
if(img==){
printf("Invalid arguments");
cvReleaseImage(&dispImg);
return;
}
//设置感兴趣区域,随着for的循环,感兴趣区域不断右移
cvSetImageROI(dispImg,cvRect(m,n,, ));
//释放指针,为下一幅图的指向做准备
cvResize(img,dispImg);
//释放感兴趣区域,为下一次做准备
cvResetImageROI(dispImg);
}
cvShowImage(title,dispImg);
va_end(args);//【结束解析】
cvReleaseImage(&dispImg); } int main(int argc, char *argv[]){
CvCapture* capture=cvCreateFileCapture("E:\\Videos\\xx.avi");//让capture变量指向视频文件
if(!capture) return -;//检查函数是否成功
cvNamedWindow("video",);//声明窗口
cvResizeWindow("video",,);
//cvNamedWindow("video1",1);
while(){
//变量初始化
IplImage *vd_frame = cvQueryFrame(capture);
IplImage *gray_frame = cvCreateImage(cvGetSize(vd_frame),vd_frame->depth,);
IplImage *canny_frame = cvCreateImage(cvGetSize(vd_frame),vd_frame->depth,);
//和vd_frame一样的通道
IplImage *frame1=cvCreateImage(cvGetSize(vd_frame),vd_frame->depth,vd_frame->nChannels);
IplImage *frame2=cvCreateImage(cvGetSize(vd_frame),vd_frame->depth,vd_frame->nChannels); //image转换
cvConvertImage(vd_frame,gray_frame,);//flag=1则会得到倒立的图像
cvCanny(vd_frame,canny_frame,,,);//阈值一,小一点可以扣更多边缘。。阈值二越大扣的越少,3通道
//cvShowImage("video1",canny_frame);
//颜色转换
cvCvtColor(gray_frame,frame1,CV_GRAY2RGB);//BGR或RGB都行
cvCvtColor(canny_frame,frame2,CV_GRAY2RGB);
//函数调用
//cvShowImage("video1",frame1);
showThreeImage("video",,vd_frame,frame1,frame2); char c=cvWaitKey();
if(c==) break;
//释放空间
cvReleaseImage(&gray_frame);
cvReleaseImage(&canny_frame);
cvReleaseImage(&frame1);
cvReleaseImage(&frame2); }
cvReleaseCapture(&capture);
cvDestroyAllWindows();
return ;
}

最新文章

  1. effectiveC++ 内存管理 学习笔记
  2. 《java JDK7 学习笔记》之异常处理
  3. 学习Linux系列--布署常用服务
  4. 简单的JS控制button颜色随点击更改
  5. 烟大 Contest1025 - 《挑战编程》第二章:数据结构 Problem A: Jolly Jumpers(水题)
  6. string.format
  7. Engine许可初始化 - gis开发初步
  8. 关于Failed to check the status of the service com.taotao.service.ItemService. No provider available fo
  9. ansible笔记(8):常用模块之系统类模块(二)
  10. [js]js中变量带var和不带var的区别
  11. 配置apache虚拟域名(phpStudy2016)
  12. 1-STM32嵌入LUA开发(控制小灯闪耀)
  13. Spring学习六(事物管理)
  14. ClusterControl docker 环境搭建
  15. 【leetcode 简单】 第七十九题 区域和检索 - 数组不可变
  16. css3 属性——calc()
  17. BZOJ 4719--天天爱跑步(LCA&amp;差分)
  18. 04-Tomcat体系结构与插件配置
  19. Java异常体系和异常处理机制
  20. S/4 HANA中发票输出切换回NAST

热门文章

  1. 关于kafka连接不上别的机器问题Connection refused
  2. 配置DNS
  3. Windows Git+TortoiseGit简易使用教程
  4. jQuery Easing 动画效果扩展 ,全屏滚动案例
  5. 看完com本质论第一章
  6. Java Warmup
  7. hotspot
  8. python字符串关键点总结
  9. request.getParameter与request.getAttribute()
  10. 【转】关于B/S架构应用程序的权限设置分析和总结