zoukankan      html  css  js  c++  java
  • 视频图像处理基础-获取图像的仿真数据流

    zynq架构之别人整理http://xilinx.eetrend.com/blog/4415

    在验证算法时,首先第一步就是如何载入图片进行验证,这里的图像包括图像,视频数据流,外部摄像头的调用~

    HLS中两种基础的加载方法:

    1)通过 cvLoadImage 函数加载图片

    格式: IplImage* src = cvLoadImage(INPUT_IMAGE); cvShowImage("src",src);

    函数原型:IplImage* cvLoadImage(const char*filename,int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));

    filename :要被读入的文件的文件名(包括后缀);

    iscolor:指定读入图像的颜色和深度; 指定的颜色可以将输入的图片转为 3 信道(CV_LOAD_IMAGE_COLOR),单信道 (CV_LOAD_IMAGE_GRAYSCALE),或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。

    一个简单的小栗子:通过 cvLoadImage 函数读取图片显示

    源码及结果如下图:

     1 IplImage* src = cvLoadImage(INPUT_IMAGE);
     3 IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);//获取原始图像大 小
     5 AXI_STREAM src_axi, dst_axi;
     7 IplImage2AXIvideo(src, src_axi);
     9 AXIvideo2IplImage(src_axi, dst);
    11 cvSaveImage(OUTPUT_IMAGE, dst);
    13 cvShowImage( "result_1080p",dst);

    2)通过Imreadd函数读取图片

    格式: Mat src_rgb = imread(INPUT_IMAGE); IplImage src = src_rgb; cvShowImage("src",&src);

    首先,我们看 imread 函数,可以在官方文档中查到其原型如下: CV_EXPORTS_W Mat imread( const string& filename, int flags=1 );

    第一个参数,const string&类型的 filename,填我们需要载入的图片路径名。

    第二个参数,int 类型的 flags,为载入标识,它指定一个加载图像的颜色类型。可以看到它自带 缺省值 1.所以有时候这个参数在调用时我们可以忽略,如 果在调用时忽略这个参数,就表示载入三通道的彩色图像。

    再举一个简单的小栗子:

    1 Mat src_rgb = imread(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);//加载图片并灰度显示
    2 IplImage src = src_rgb;
    3 cvSaveImage(OUTPUT_IMAGE, &src);
    4 cvShowImage("src",&src);

    3.3 视频流文件的载入

    cvCaptureFromAVI 函数进行视频文件的载入

    格式:cvCaptureFromAVI("AVI 文件名称");

    功能:用来播放 AVI 文件视频;

    用 cvCaptureFromAVI()跟 cvCaptureFromFile(),cvCreateFileCapture()都是一样的作 用;文件的类型不一定必须是 AVI 格式,只要文件符合 OpenCV 支持的格式就能播放。

    格式:int cvGrabFrame(CvCapture 结构体)

    功能:将 capture 抓下來的相片放在 OpenCV 中;其与 cvQueryFrame()是相同的步骤; cvGrabFrame()返回值为 0 或 1;0 是失败,1 是成功。

    格式:cvRetrieveFrame(CvCapture 结构);

    功能:从 OpenCV 得到 Frame,并配置给 IplImage 结构体;其中: cvQueryFrame()=cvGrabFrame()+cvRetrieveFrame().

    举一个小例子:

     1 IplImage *frame;
     2 CvCapture *capture = cvCaptureFromAVI("1.avi");//获取视频数据
     3 cvNamedWindow("AVI player",0);
     4 while(true)
     5 {
     6 if(cvGrabFrame(capture))
     7 {
     8  frame = cvRetrieveFrame(capture);
     9 cvShowImage("AVI player",frame);
    10 if(cvWaitKey(10)>=0) break;
    11 }
    12 }

    3.4 外部摄像头的调用

    CvCapture*cvCaptureFromCAM( int index );

    参数:index 要使用的摄像头索引。释放这个结构,使用函数 cvReleaseCapture。

    要将视频写入文件中,使用 cvWriteFrame 写入一帧到一个视频文件中 int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );

    通过摄像头捕获视频数据的关键代码如下,并且通过调用外部 USB 摄像头成功采集到视频数据,为 后期算法验证提供了测试依据。

    IplImage *frame; CvCapture *capture = cvCaptureFromCAM(1);//捕获摄像头数据0--笔记本自带摄像头 1--外部摄像头

  • 相关阅读:
    springmvc最简单的搭建,初学者必看
    搭建服务器需要的那些
    jaxb使用
    Memcached Java Client API详解
    memcached client --ref
    使用Dom4j解析XML
    架构整洁之道
    架构的整理
    VMware虚拟机的三种联网方法及原理
    软件开发进度管理
  • 原文地址:https://www.cnblogs.com/Dinging006/p/9248868.html
Copyright © 2011-2022 走看看