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

本文介绍了一种从视频文件中读取数据并转换为灰度图的方法,随后运用Canny边缘检测算法进行图像处理。通过代码示例,详细阐述了如何在OpenCV环境中实现这一过程,并展示了图像处理前后的效果对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


}

转载于:https://www.cnblogs.com/beihaidao/p/4870131.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值