zoukankan      html  css  js  c++  java
  • OpenCV3入门(一)环境搭建与实验

    1、环境搭建

    1.1 VS2017开发环境搭建

    1)、下载软件包

    https://opencv.org/

     

    2)、配置环境变量

    配置win10系统环境变量,把下面路径添加到path。

    D:WORK5.OpenCVopencvuildx64vc15in

    3)、vs属性配置

     

    配置包含路径

    D:WORK5.OpenCVopencvuildincludeopencv

    D:WORK5.OpenCVopencvuildincludeopencv2

    配置库目录

    D:WORK5.OpenCVopencvuildx64vc15lib

    配置链接器输入附加依耐项

    opencv_world343d.lib(在D:WORK5.OpenCVopencvuildx64vc15lib下)

    1.2 python3环境搭建

    python开发环境安装比较简单,网上很多例子,不在赘述,基本上pip install opencv-python即可。

    2、图像操作—读、写、显示

    例:1:读取图像

    #include <opencv2/opencv.hpp>
    #include <iostream>
    using namespace std;
    using namespace cv;
    
    int main() {
        Mat pic1 = imread("D:/WORK/5.OpenCV/LeanOpenCV/pic_src/pic1.bmp");
        namedWindow("pic1");
        imshow("pic1", pic1);
        waitKey(0);
    }

     

    例2:写图像

    #include <opencv2/opencv.hpp>
    #include <iostream>
    using namespace std;
    using namespace cv;
    
    int main() {
        Mat mat = Mat(300, 500, CV_8UC1);
        cout << "rows="<<mat.rows << ",cols=" << mat.cols << endl;
        for (int i = 0; i < mat.rows; i++)
        {
            uchar* row = mat.ptr<uchar>(i);
            for (int j = 0; j < mat.cols; j++)
            {
                row[j] =(uchar) ((j / 20 ) * 10);
            }
        }
    
        imshow("pic1", mat);
        imwrite("D:/WORK/5.OpenCV/LeanOpenCV/pic_src/mat.bmp", mat);
        waitKey(0);
    }

    3、函数分析

    Mat有3个重要的方法:

    Mat mat = imread(const String* filename, int flags); 读取图像
    imshow(const string winName, InputArray mat); 显示图像
    imwrite(const string& filename, InputArray img); 储存图像
    
    1) imread
    Mat imread(const String& filename,int flags = IMREAD_COLOR)
    enum {
        IMREAD_UNCHANGED = -1, // 8 位,彩色或非彩色
        IMREAD_GRAYSCALE = 0, // 8 位,灰度
        IMREAD_COLOR = 1,    //未改变深度、颜色
        IMREAD_ANYDEPTH = 2, //任意深度,未改变颜色
        IMREAD_ANYCOLOR = 4, //未改变深度,任意颜色
        IMREAD_LOAD_GDAL = 8 // 使用 gdaL 驱动程序
    };

    因为flags是int型的,如果不在上面的枚举中取值,则可以这样进行。

    flags>0:返回3个通道的彩色图像

    flags=0:返回灰度图像

    flags<0:返回包含Alpha通道的加载的图像

    注意,如果使用彩色模式输入图像,解码后顺序是BGR,而不是通常的RGB。

     2) imshow和namedWindow

    imshow函数前没有namedWindow函数则自动执行一个,但是该函数默认创建窗口的参数为cv2.WINDOW_AUTOSIZE,窗口大小会自动适应所显示的图像,并且不能改变窗口的大小。

    cv2.namedWindow("demo" , cv2.WINDOW_NORMAL)                             
    cv2.imshow("demo" , img)

    这样生成的窗口时可以调整大小的,通过改变参数可以得到不同功能的窗口.

    窗口大小可以改变    cv2.WINDOW_NORMAL

    窗口大小不可以改变  cv2.WINDOW_AUTOSIZE

    窗口大小自适应比列  cv2.WINDOW_FREERATIO

    窗口大小保持比例    cv2.WINDOW_KEEPRATIO

    显示色彩变成暗色    cv2.WINDOW_GUI_EXPANDED

    3) imwrite

    CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,

    const std::vector<int>& params = std::vector<int>());

    第一个参数const String& filename表示需要写入的文件名,必须要加上后缀。

    第二个参数InputArray img表示Mat类型数据。

    第三个参数const std::vector& params表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),一般情况下不用写。

    •对于JPEG格式的图片,这个参数表示从0-100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95.

    •对于PNG格式的图片,这个参数表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0-9.较高的值意味着更小的尺寸和更长的压缩时间而默认值是3.

    •对于PPM,PGM或PBM格式的图片,这个参数表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或1,而默认值为1.

    vector<int> compression_params;
    compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);  compression_params.push_back(100); //图片质量
    imwrite("test2.jpg", img, compression_params);

     

    4、遇到的问题

    opencv 一个namedWindow,imshow出现两个窗口问题

    链接器-输入-附加依赖项,opencv_worldXXX.lib和opencv_worldXXXd.lib,只需要配置一个就好了。

     

    5、参考文献

    1、《OpenCV3 编程入门》 , 电子工业出版社,毛星雨著

     尊重原创技术文章,转载请注明。

    https://www.cnblogs.com/pingwen/p/12292630.html

  • 相关阅读:
    数据结构之链表
    非常好的Java反射例子
    return和finally的执行和联系
    struts2中的OGNL详解
    解耦与耦合的你我他
    struts2案例
    《使用Hibernate开发租房系统》内部测试笔试题
    一对多双向关联关系
    Oracle基本数据类型
    transactionManager的type与dataSource的type
  • 原文地址:https://www.cnblogs.com/pingwen/p/12292630.html
Copyright © 2011-2022 走看看