• OpenCV初步



    注:原创不易,转载请务必注明原作者和出处,感谢支持!

    一 写在开头

    1.1 本文内容

    本文的内容涉及了OpenCV 3.4.2在Ubuntu 16.04 LTS下的安装,OpenCV中图像的加载,显示,修改和保存等。

    二 涉及的API

    本文中涉及到的OpenCV API如下。这里只简要概括API的功能,API详细用法请参阅权威的官方文档。

    • Mat cv::imread(const String &filename, int flags = IMREAD_COLOR);

    imread()用于读取图片文件,读取到的图片以Mat对象返回。filename为图片路径名。flags用于控制图片的读取。如果读取失败,Mat.empty()会返回true,Mat.data会被设置为NULL。

    • void cv::namedWindow(const String &winname, int flags = WINDOW_AUTOSIZE);

    namedWindow()用于创建window,创建的window可以用作图像(Mat对象)的placeholder。可以理解为window是用于盛放并显示图像的容器。winname是window的名字,winname会被imshow()方法引用。flags决定了window的类型,常用的取值为WINDOW_AUTOSIZE。

    • void cv::imshow(const String &winname, InputArray mat);

    imshow()用于显示图像。winname是盛放图像的window的名字,mat为图像对象。

    • void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0);

    cvtColor()用于转换图片的颜色空间(color space),比如常用的RGB颜色空间等。src为原图像,dst为转换后的图像,code表示颜色空间转换代码,比如COLOR_BGR2GRAY表示将RGB的彩色图转换成灰度图。

    • bool cv::imwrite(const String &filename, InputArray img, const std::vector &params = std::vector());

    imwrite()用于将图像写入文件中。filename是文件名,img表示要被写入文件的Mat对象,params表示参数向量。

    • int cv::waitKey(int delay = 0);

    waitKey()用于等待按键按下事件。delay表示延迟的时间。

    三 OpenCV 3.4.2在Ubuntu 16.04 LTS下的编译安装

    关于OpenCV的安装请参考官方提供的文档:Installation in Linux。我尝试过在Ubuntu 16.04 LTS中编译安装最新的OpenCV 4.0版本,但在安装过程中出现了严重的错误,没能成功安装。在我将版本降至3.4.2时才成功。

    四 OpenCV安装测试与图像的加载和显示

    4.1 安装测试

    下面这个小实例用于测试OpenCV是否成功安装。之所以不同时使用using namespace stdusing namespace cv是因为OpenCV库中有一些外部名和C++ STL中的名字冲突。

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    
    int main(int argc, char *argv[])
    {
        Mat src = imread("../images/lena.jpg", IMREAD_COLOR);
        if (src.empty())
        {
            std::cout << "Could not load image..." << std::endl;
            return -1;
        }
    
        namedWindow("Test OpenCV Install", WINDOW_AUTOSIZE);
        imshow("Test OpenCV Install", src);
    
        waitKey(0);
        return 0;
    }
    

    使用下列命令来编译上面的cpp文件。

    g++ -g -Wall -std=c++11 Test-OpenCV-Install.cpp -o Test-OpenCV-Install `pkg-config --cflags --libs opencv`
    

    如果一切无误,使用命令./Test-OpenCV-Install运行可执行文件,可以看到如下图所示的结果。

    4.2 图像的加载和显示

    版本1

    #include <cstdio>
    #include <opencv2/opencv.hpp>
    
    using namespace cv;
    
    int main(int argc, char *argv[])
    {
        if (argc != 2)
        {
            printf("usage : DisplayImage.out <image_path>
    ");
            return -1;
        }
    
        Mat img = imread(argv[1], IMREAD_COLOR);
        if (!img.data)
        {
            printf("No image data...
    ");
            return -1;
        }
        namedWindow("Display Image", WINDOW_AUTOSIZE);
        imshow("Display Image", img);
    
        waitKey(0);
        return 0;
    }
    

    编译并运行上述版本,结果如下。

    版本2

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <string>
    
    using namespace cv;
    
    int main(int argc, char *argv[])
    {
        // default image name
        std::string imgName("../images/lena.jpg");
    
        if (argc > 1)
            imgName = argv[1];
    
        // load image file
        Mat img = imread(imgName, IMREAD_COLOR);
        if (img.empty())
        {
            std::cout << "Could not load image..." << std::endl;
            return -1;
        }
    
        // create a image placeholder and show the image inside it
        namedWindow("Display Image", WINDOW_AUTOSIZE);
        imshow("Display Image", img);
    
        // wait for a key press
        waitKey(0);
        return 0;
    }
    

    编译并运行上述版本,结果如下。

    五 图像的修改和保存

    #include <opencv2/opencv.hpp>
    
    using namespace cv;
    
    int main(int argc, char *argv[])
    {
        if (argc != 3)
        {
            std::cout << "usage : convert.out <src_img_path> <des_img_path>" << std::endl;
            return -1;
        }
    
        Mat src = imread(argv[1], IMREAD_COLOR);
        if (src.empty())
        {
            std::cout << "could not load image..." << std::endl;
            return -1;
        }
    
        Mat src_gray;
        cvtColor(src, src_gray, COLOR_BGR2GRAY);
        imwrite(argv[2], src_gray);
    
        namedWindow(argv[1], WINDOW_AUTOSIZE);
        namedWindow(argv[2], WINDOW_AUTOSIZE);
        imshow(argv[1], src);
        imshow(argv[2], src_gray);
    
        waitKey(0);
        return 0;
    }
    

    编译并运行上述版本,结果如下。

    六 参考资料

    1. OpenCV文档
  • 相关阅读:
    注册InstallShield
    java学习——异常处理
    IntellJ IDEA下写JUnit
    【转】光盘和U盘安装win7和ubuntu14.04全步骤
    上汽笔试题
    小白面试
    mysql
    HOWTO: Setup XCode 6.1 to work with OpenCV3 libraries
    [转]在MacOS和iOS系统中使用OpenCV
    [转]在 Mac OS X 终端里使用 Solarized 配色方案
  • 原文地址:https://www.cnblogs.com/laizhenghong2012/p/10180003.html
Copyright © 2020-2023  润新知