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


    //从视频文件中读入数据-->将数据转换为灰度图-->对图像做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(960, 300), 8, 3);
    
        va_list args;//【定义不定参数列表args】
        va_start(args,num);//【获得第一个可变参数地址】
        for(i=0,m=20,n=20;i<num;i++,m+=320){
            img = va_arg(args,IplImage*);//【读取一个IplImage类型的,args指向下一个】
            if(img==0){
                printf("Invalid arguments");
                cvReleaseImage(&dispImg);
                return;
            }
            //设置感兴趣区域,随着for的循环,感兴趣区域不断右移
            cvSetImageROI(dispImg,cvRect(m,n,300, 300));
            //释放指针,为下一幅图的指向做准备
            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 -1;//检查函数是否成功
        cvNamedWindow("video",1);//声明窗口
        cvResizeWindow("video",960,300);
        //cvNamedWindow("video1",1);
        while(1){    
            //变量初始化
            IplImage *vd_frame = cvQueryFrame(capture);
            IplImage *gray_frame = cvCreateImage(cvGetSize(vd_frame),vd_frame->depth,1);
            IplImage *canny_frame = cvCreateImage(cvGetSize(vd_frame),vd_frame->depth,1);
            //和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,0);//flag=1则会得到倒立的图像
            cvCanny(vd_frame,canny_frame,10,50,3);//阈值一,小一点可以扣更多边缘。。阈值二越大扣的越少,3通道
            //cvShowImage("video1",canny_frame);
            //颜色转换
            cvCvtColor(gray_frame,frame1,CV_GRAY2RGB);//BGR或RGB都行
            cvCvtColor(canny_frame,frame2,CV_GRAY2RGB);
            //函数调用
            //cvShowImage("video1",frame1);
            showThreeImage("video",3,vd_frame,frame1,frame2);
    
            char c=cvWaitKey(28);
            if(c==27) break;
            //释放空间
            cvReleaseImage(&gray_frame);
            cvReleaseImage(&canny_frame);
            cvReleaseImage(&frame1);
             cvReleaseImage(&frame2);
            
        }
        cvReleaseCapture(&capture);
        cvDestroyAllWindows();
        return 0;
    }

  • 相关阅读:
    mybatis使用Example进行条件查询
    博客园页面DIY
    内网穿透
    使用ResponseEntity进行返回json数据
    spring中的ResponseEntity理解
    springboot整合mybatis通用Mapper
    解决pip安装过慢的问题
    【记录】linux 命令拷贝文件到远程服务器,linux下载文件到本地
    【记录】ELK之logstash同步mysql数据到Elasticsearch ,配置文件详解
    【记录】logstash 命令解释
  • 原文地址:https://www.cnblogs.com/beihaidao/p/4887039.html
Copyright © 2020-2023  润新知