//从视频文件中读入数据-->将数据转换为灰度图-->对图像做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 ;
}

从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中的更多相关文章

  1. 机器学习进阶-图像基本处理-视频的读取与处理 1.cv2.VideoCapture(视频的载入) 2.vc.isOpened(载入的视频是否可以打开) 3.vc.read(视频中一张图片的读取) 4.cv2.cvtColor(将图片转换为灰度图)

    1.vc = cv2.VideoCapture('test.mp4') #进行视频的载入 2.vc.isOpened() # 判断载入的视频是否可以打开 3.ret, frame = vc.read( ...

  2. 创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息。

    创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息. <html> & ...

  3. c语言实现BMP图像转换为灰度图

    当初是自己要装X,非要用c来写信息隐藏作业,装了X,就得付出实践.查了好久资料,到期末才把作业交了,这里总结一下. 这道题是将真彩图转换为灰度图. 关于BMP文件结构,这是困扰了我好久的问题,上网查了 ...

  4. Android-将RGB彩色图转换为灰度图

    package com.example.yanlei.wifi; import android.graphics.Bitmap; import android.graphics.BitmapFacto ...

  5. SharePoint Iframe 报错“此内容不能显示在一个框架中”

    问题描述 我们SharePoint站点用Excel Service发布的Excel,需要Iframe到其他系统中,但是,Iframe的时候发现报错“此内容不能显示在一个框架中”. 后来,尝试在其他系统 ...

  6. SharePoint Iframe 报错“此内容不能显示在一个框架中”<续>

    在之前的SharePoint站点iframe引用中,我们遇到过下面的问题,就是其它系统或者不通环境的SharePoint站点,引用SharePoint页面会报错“此内容不能显示在一个框架中”,之前我们 ...

  7. Qt 中彩色图像转换为灰度图

    近期在做几个图像处理相关的项目.里面有一个操作就是须要先将彩色图像转换为灰度图像. QImage 有一个convertToFormat方法.最開始一直用这个函数来实现. 可是今天细致看了看,发现这个函 ...

  8. 【Python开发】python PIL读取图像转换为灰度图及另存为其它格式(也可批量改格式)

    例如有一幅图,文件名为"a.jpg'.  读取: from PIL import Image #或直接import Image im = Image.open('a.jpg') 将图片转换成 ...

  9. 如何使用 python3 将RGB 图片转换为 灰度图

    首先,介绍第一种方法, 使用  PIL  库,   PIL库是一种python语言常用的一个图形处理库. 关于   PIL  库的安装本文就不介绍了. from PIL import Image I ...

随机推荐

  1. 英语语法最终珍藏版笔记-6“情态动词+have+ done”的含义

    “情态动词+have+ done”的含义 1.Must have done的含义.“must have+过去分词”表示对过去的推测,意思是“一定已经,想必已经,准是已经….”,只用于肯定句中.例如: ...

  2. 【JZOI2002】【BZOJ1477】【P1371】青蛙的约会

    看lzx的模板才写出来的,我之前的思路好想错了 chad_orz 原题: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝着对方 ...

  3. lua堆栈操作常用函数学习二

    /* ** basic stack manipulation */ LUA_API int  <strong> (lua_gettop) (lua_State *L);  </str ...

  4. 一个非常简单的RPC服务

    1.servicefunctions.php <?php class ServiceFunctions { public static function getDisplayName($f,$l ...

  5. Android 反编译 代码注入之HelloWorld

    为了向经典的"Hello, World"致敬,我们也从一个简单的程序开始HelloWorld.apk.当你把这个APK安装到手机上运行后,在屏幕上就显示一行文字"Hell ...

  6. c#强制执行内存回收

    [DllImport("psapi.dll")] private static extern int EmptyWorkingSet(int hProcess); GC.Colle ...

  7. Java 实现任意N阶幻方的构造

    一.关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶. 以6阶为例,可由3阶幻方与由0,1,2 ...

  8. node-webkit 应用打包发布

    方便进行打包,使用了nodejs  ,gulp  nw-builder 备注  windows 操作系统部分版本需要包含  msvcr100.dll  建议制作安装程序的时候直接包含 为了进行视频以及 ...

  9. es6新特性

    变量-------------------------- let, const:必须直接给一个变量赋值.注意,对象的属性或数组成员还是可以改变的. const MY_OBJECT = {some: 1 ...

  10. Android 网络编程 Socket

    1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...