• 学习opencv_学习笔记一


    第二章 opencv入门

    主函数

    #include <opencv2opencv.hpp>

    using namespace cv;

    int main(int argc, char ** argv);

    void showImage();

    void playVideo();

    void onTrackbarSlide(int pos);

    void controlVideo();

    void simpleChange();

    void doPydown();

    void doCanny();

    void videoCapture();

    void writeVideo();

    //加载并在屏幕上显示一幅图像

    int main(int argc,char** argv)

    {

    //显示图像

    //showImage();

    //播放avi视频

    //playVideo();

    //控制视频

    //controlVideo();

    //一个简单的变换

    //simpleChange();

    // 一个复杂的变换

    //doPydown();

    //边缘检测

    //doCanny();

    //从摄像机读取数据

    //videoCapture();

    //写入avi视频

    writeVideo();

    }

    显示图像

    /**

     *显示图像

    **/

    void showImage() {

    //Mat picture = imread("test.jpg");//要和main.cpp文件放在一个文件夹下  //

    //imshow("测试程序", picture);

    //waitKey(0);

    //图像加载到内存

    //IplImage * img=cvLoadImage(argv[1]);

    //直接打开本地图像

    IplImage * img = cvLoadImage("test.jpg");

    //在屏幕上创建一个窗口

    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);

    //显示图像

    cvShowImage("Example1", img);

    //等待用户按键操作

    waitKey(0);

    //释放内存

    cvReleaseImage(&img);

    //销毁窗口

    cvDestroyWindow("Example1");

    }

     

     

    播放avi视频

    /*

    播放avi视频

    */

    void playVideo() {

    //创建一个窗口

    cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);

    //返回的catpure指针,指向avi文件的开头,分配内存

    CvCapture* capture = cvCreateFileCapture("output.avi");

    //分配一帧

    IplImage* frame;

    while (true)

    {

    //将下一帧载入内存

    frame = cvQueryFrame(capture);

    if (!frame)break;

    cvShowImage("Example2", frame);

    //等待33秒,实际应用中可以从capture中读取实际帧率

    char c=cvWaitKey(33);

    if (c==27)

    {

    break;

    }

    }

    cvReleaseCapture(&capture);

    cvDestroyWindow("Example2");

    }

     

     

    视频播放控制

    //全局变量,位置

    int g_slider_position = 0;

    //CvCapture 结构体

    CvCapture* g_capture = NULL;

    /*

    控制播放视频

    */

    void controlVideo() {

    //创建窗体

    cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);

    //读放avi文件

    g_capture = cvCreateFileCapture("output.avi");

    //从capture查询数据,帧数为0时,滚动条不会视创建

    int frames = cvGetCaptureProperty(

    g_capture,

    //视频文件总帧数

    CV_CAP_PROP_FRAME_COUNT

    );

    if (frames!=0)

    {

    cvCreateTrackbar(

    "Position",

    "Example3",

    //位置

    &g_slider_position,

    //

    frames,

    //回调函数

    onTrackbarSlide

    );

    }

    IplImage* frame;

    while (true)

    {

    //将下一帧载入内存

    frame = cvQueryFrame(g_capture);

    if (!frame)break;

    cvShowImage("Example3", frame);

    //等待33秒,实际应用中可以从capture中读取实际帧率

    char c = cvWaitKey(33);

    if (c == 27)

    {

    break;

    }

    }

    cvReleaseCapture(&g_capture);

    cvDestroyWindow("Example3");

    }

    /*

    回调函数,参数为位置

    */

    void onTrackbarSlide(int pos) {

    cvSetCaptureProperty(

    g_capture,

    //以帧数来设置位置

    //如果想以视频的长度比例来设置,可以使用CV_CAP_PROP_POS_AVI_RATIO

    CV_CAP_PROP_POS_FRAMES,

    pos

    );

    }

     

     

     

    一个简单的变换

    /*

    一个简单的变换, 对一幅图像作平滑处理

    */

    void simpleChange() {

    //直接打开本地图像

    IplImage * img = cvLoadImage("test.jpg");

    //创建窗体原始图像

    cvNamedWindow("Example4_in");

    //创建窗体处理后图像

    cvNamedWindow("Example4_out");

    //显示图像

    cvShowImage("Example4_in", img);

    //创建一张图像,用作处理后显示

    IplImage* out = cvCreateImage(

    cvGetSize(img),//图像结构大小

    IPL_DEPTH_8U,//每个像素点的数据类型

    3 //通道数

    );

    //每个像素3*3区域平滑处理

    cvSmooth(img,out,CV_GAUSSIAN,3,3);

    //显示图像

    cvShowImage("Example4_out",out);

    //释放图像

    cvReleaseImage(&out);

    cvWaitKey(0);

    cvDestroyWindow("Example4_in");

    cvDestroyWindow("Example4_out");

    }

     

     

    /*

    一个复杂的变换,显示图像的一半

    */

    void showHalf() {

    //直接打开本地图像

    IplImage * img = cvLoadImage("test.jpg");

    //assert(img->width%2==0 && img->height%2==0);

    IplImage* out = cvCreateImage(//从旧的图像中读取信息

    CvSize(img->width/2,img->height/2),

    img->depth,

    img->nChannels

    );

    cvPyrDown(img,out);

    //在屏幕上创建一个窗口

    cvNamedWindow("Example5", CV_WINDOW_AUTOSIZE);

    //显示图像

    cvShowImage("Example5", out);

    //等待用户按键操作

    waitKey(0);

    //释放内存

    cvReleaseImage(&out);

    //销毁窗口

    cvDestroyWindow("Example5");

    }

     

    /*

    边缘检测输出一个单通道图像

    */

    void doCanny() {

    //直接打开本地图像

    IplImage * img = cvLoadImage("test.jpg");

    double lowThresh = 5;

    double highThresh = 20;

    double aperture = 3;

    if (img->nChannels!=1)

    {

    return;

    }

    IplImage* out = cvCreateImage(

    CvSize(cvGetSize(img)),

    IPL_DEPTH_8U,

    1

    );

    cvCanny(img, out, lowThresh, highThresh,aperture);

    //在屏幕上创建一个窗口

    cvNamedWindow("Example6", CV_WINDOW_AUTOSIZE);

    //显示图像

    cvShowImage("Example6", out);

    //等待用户按键操作

    waitKey(0);

    //释放内存

    cvReleaseImage(&out);

    //销毁窗口

    cvDestroyWindow("Example6");

    }

     

     

    /*

    从摄像机读入数据

    */

    void videoCapture() {

    CvCapture* capture = cvCreateCameraCapture(0);

    //分配一帧

    IplImage* frame;

    while (true)

    {

    //将下一帧载入内存

    frame = cvQueryFrame(capture);

    if (!frame)break;

    cvShowImage("Example7", frame);

    //等待33秒,实际应用中可以从capture中读取实际帧率

    char c = cvWaitKey(10);

    if (c == 27)

    {

    break;

    }

    }

    cvReleaseCapture(&capture);

    cvDestroyWindow("Example7");

    }

     

     

     

     

    写入avi视频

    /*

    写入avi视频文件

    */

    void writeVideo() {

    CvCapture* capture = 0;

    capture = cvCreateFileCapture("output.avi");

    if (!capture) {

    return;

    }

    //初始化视频读入

    IplImage *bgr_frame = cvQueryFrame(capture);

    double fps = cvGetCaptureProperty(//取得视频流属性

    capture,

    CV_CAP_PROP_FPS

    );

    CvSize size = CvSize(

    (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),

    (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)

    );

    CvVideoWriter *writer = cvCreateVideoWriter(

    "output2.avi",//视频文件名

    CV_FOURCC('M', 'J', 'P', 'G'),//编码格式

    fps,//播放帧率

    size//视频图像大小

    );

    IplImage* logpolar_frame = cvCreateImage(

    size,

    IPL_DEPTH_8U,

    3

    );

    while ((bgr_frame=cvQueryFrame(capture))!=NULL)

    {

    cvLogPolar(

    bgr_frame,

    logpolar_frame,

    cvPoint2D32f(

    bgr_frame->width/2,

    bgr_frame->height/2),

    40,

    CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);

    cvWriteFrame(writer,logpolar_frame);

    }

    cvReleaseVideoWriter(&writer);

    cvReleaseImage(&logpolar_frame);

    cvReleaseCapture(&capture);

    }

  • 相关阅读:
    mysqlsla 分析mysql慢查询日志
    MyBatis-DynamicSQL 动态SQL
    MyBatis-resultType 与 resultMap 中的几种返回类型
    MyBatis-${}与#{}
    MyBatis-parameterType 入参封装 Map 流程
    MyBatis-parameterType 取出入参值
    MyBatis-CURD
    第二十四篇-用VideoView制作一个简单的视频播放器
    第二十三篇-ubuntu18.04怎么下载播放器以及如何设置默认播放器
    第二十二篇-Guideline基准线
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194177.html
Copyright © 2020-2023  润新知