OpenCV:几个入门小demo

作者: 小村医 | 来源:发表于2018-12-01 21:38 被阅读5次

    一、显示图像

    从磁盘中加载一张图片并在屏幕上显示

    #include <iostream>
    #include <opencv2/opencv.hpp>
    using namespace cv;
    
    int main(int argc, const char * argv[]) {
        IplImage* img =cvLoadImage("/Users/Desktop/test.jpg");
        cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
        cvShowImage("test", img);
        cvWaitKey(0);
        cvReleaseImage(&img);
        cvDestroyWindow("test");
        return 0;
    }
    
    1. IplImage* img =cvLoadImage("/Users/Desktop/test.jpg");
      将图像文件加载到内存,并返回一个指针,此指针指向一块位描述改该图像文件的数据结构而分配的内存块。IplImage结构体将是我们在使用OpenCV时最常用到的数据结构。OpenCV使用IplImage结构体处理诸如单通道、多通道、整型、浮点型等所有类型的图像文件。

    2. cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
      该函数由HighGUI库提供,cvNamedWindow函数用于在屏幕上创建一个窗口。第一个参数指定了该窗口的标题,第二个定义了窗口的属性,该参数可被设置为0(默认)或CV_WINDOW_AUTOSIZE。设置为0时窗口的大小不会因图像的大小而改变,CV_WINDOW_AUTOSIZE:则会根据图像的实际大小自动进行拉伸或缩放。

    3. cvShowImage("test", img);
      在一个已经创建的窗口上使用cvShowImage显示图像。第一个参数确定在哪个已经存在的窗口中显示图像。

    4. cvWaitKey(0);
      该函数的功能是使程序暂停,等待用户触发一个按键操作。如果将这个函数参数设为整数,则程序暂停一段时间。当设置为0或负数时,程序将一直等待用户触发按键操作。

    二、播放一个小视频

    播放视频几乎与现实图像一样容易。播放视频是只需要处理的问题是如何循环地读取视频中的每一帧,以及如何退出循环。

    #include <iostream>
    #include <opencv2/opencv.hpp>
    using namespace cv;
    
    int main(int argc, const char * argv[]) {
        cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
        CvCapture* capture=cvCreateFileCapture("/Users/Downloads/181123080148212016.mp4");
        IplImage* frame;
        while (1) {
            frame= cvQueryFrame(capture);
            if(!frame)break;
            cvShowImage("test", frame);
            char c= cvWaitKey(33);
            if(c==27) break;
            
        }
        cvReleaseCapture(&capture);
        cvDestroyWindow("test");
        return 0;
    }
    

    CvCapture* capture=cvCreateFileCapture("/Users/Downloads/181123080148212016.mp4");

    读入视频文件返回一个CvCapture结构的指针。这个结构体包括了所有关于要读入的视频文件的信息。进入循环后cvQueryFrame用来将下一帧视频文件载入内存中返回一个当前帧的指针。与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在CvCapture结构中已经分配好的内存

    三、一个简单的变换

    载入一张图片病进行平滑处理

    #include <iostream>
    #include <opencv2/opencv.hpp>
    using namespace cv;
    
    int main(int argc, const char * argv[]) {
        IplImage* image =cvLoadImage("/Users/huangyoubin/Desktop/test.jpg");
        cvNamedWindow("test_in",CV_WINDOW_AUTOSIZE);
        cvNamedWindow("test_out",CV_WINDOW_AUTOSIZE);
        cvShowImage("test_in", image);
        IplImage* out =cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
        cvSmooth(image, out,CV_GAUSSIAN,3,3);
        cvShowImage("test_out", out);
        cvWaitKey(0);
        cvReleaseImage(&image);
        cvReleaseImage(&out);
        cvDestroyWindow("test_in");
        cvDestroyWindow("test_out");
        return 0;
    }
    
    1. IplImage* out =cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
      第一个参数CvSize:通过cvGetSize获取,获取当前图像的大小。
      第二个参数:告诉我们各通道每个像素点的数据类型。
      最后一个参数:说明通道的总数
      当前图像是3个通道(每个通道8位)
    2. cvSmooth
      平滑处理实际上只是对cvSmooth函数的调用:指定输入图像,输出图像,平滑操作的方法以及平滑处理的一些参数。上面的程序中使用每个像素周围3*3区域进行高斯平滑处理。

    上一篇:OpenCV:mac上安装和配置

    相关文章

      网友评论

        本文标题:OpenCV:几个入门小demo

        本文链接:https://www.haomeiwen.com/subject/nbgrcqtx.html