码迷,mamicode.com
首页 > 其他好文 > 详细

从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测

时间:2015-10-11 22:55:39      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

//从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测
//作者:sandy
//时间:2015-10-10
#include <cv.h>
#include <highgui.h>
int main(int argc, char *argv[]){
    //预备工作
    CvCapture* capture=cvCreateFileCapture("E:\\Videos\\xx.avi");//让capture变量指向视频文件
    if(!capture) return -1;//检查函数是否成功
    //读视频
    //方法一:用cvGrab(攫取)Frame()将视频复制到内存空间,
    //再用cvRetrieve(检索)Frame()来处理读入的数据
    //方法二:用cvQueryFrame()来代替方法一种的两个函数

    //申明变量
    IplImage *vd_frame;//用来存放彩色的视频
    IplImage *gray_frame;//用来存放灰度图
    IplImage *canny_frame;//canny边缘检测后的图

    //声明窗口
    cvNamedWindow("video",0);
    cvNamedWindow("gray",0);
    cvNamedWindow("canny",0);

    //变量初始化
    vd_frame = cvQueryFrame(capture);
    gray_frame = cvCreateImage(cvGetSize(vd_frame),IPL_DEPTH_8U,1);
    canny_frame = cvCreateImage(cvGetSize(vd_frame),IPL_DEPTH_8U,1);

    while(1){
        //不同图像格式的转换函数cvConvertImage(const CvArr* src(源),CvArr dst(目标), int flag=0)
        //canny边缘检测函数cvCanny(const CvArr * image,CvArr *edges,double 阈值一,double 阈值二,int 算子内核大小)
        //小阈值用来控制边缘链接,大阈值用来控制边缘的初始分割。
        cvConvertImage(vd_frame,gray_frame,0);//flag=1则会得到倒立的图像
        cvCanny(vd_frame,canny_frame,10,50,3);//阈值一,小一点可以扣更多边缘。。阈值二越大扣的越少

        //显示
        cvShowImage("video",vd_frame);
        cvShowImage("gray",gray_frame);
        cvShowImage("canny",canny_frame);

        char c=cvWaitKey(28);
        if(c==27) break;

        vd_frame = cvQueryFrame(capture);
    }

    //查询和设置视频的各种属性

    //释放CvCapture结构
    cvReleaseCapture(&capture);

    cvDestroyAllWindows();

    return 0;


}

技术分享

从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测

标签:

原文地址:http://www.cnblogs.com/beihaidao/p/4870131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!