ETJava Beta | Java    注册   登录
  • 搜索:
  • C++之OpenCV入门到提高002:加载、修改、保存图像

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/PatrickLiu/p/18511288
    如有侵权 请联系我们删除  (页面底部联系我们)  

    一、介绍
        今天是这个系列《C++之 Opencv 入门到提高》得第二篇文章。今天这个篇文章很简单,只是简单介绍如何使用 Opencv 加载图像、显示图像、修改图像和保存图像,先给大家一个最直观的感受。但是,不能认为很简单,只是让学习的过程更平滑一点,以后的路就好走了。OpenCV 具体的简介内容,我就不多说了,网上很多,大家可以自行脑补。
        OpenCV 的官网地址:https://opencv.org/,组件下载地址:https://opencv.org/releases/
        OpenCV 官网学习网站:https://docs.opencv.ac.cn/4.10.0/index.html

        我需要进行说明,以防大家不清楚,具体情况我已经罗列出来。
            操作系统:Windows Professional 10(64位)
            开发组件:OpenCV – 4.10.0
            开发工具:Microsoft Visual Studio Community 2022 (64 位) - Current版本 17.8.3
            开发语言:C++(VC16)

    二、知识讲解
        由于今天的内容很简单,就不过多的写文字了,直接上代码,而且在代码中都进行了详细的注释,开始今天旅程吧。
        源代码中有需要图像的,把地址换成自己的。

     1 #include <opencv2/opencv.hpp>
     2 #include <iostream>
     3 
     4 using namespace cv;
     5 using namespace std;
     6 
     7 /// <summary>
     8 /// 图像处理
     9 /// 1、加载图像        imread( const String& filename, int flags = IMREAD_COLOR )
    10 /// 2、创建窗口        void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE)
    11 /// 3、显示图像        void imshow(const String& winname, InputArray mat)
    12 /// 4、修改图像        void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 )
    13 /// 5、保存图像        imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>())
    14 /// </summary>
    15 /// <returns></returns>
    16 int main()
    17 {
    18     //1、加载图像
    19     //Mat imread( const String& filename, int flags = IMREAD_COLOR ):第一个参数是图像的地址,第二个参数加载图像的方式。
    20     //IMREAD_UNCHANGED(<0)表示加载原图,不做任何修改。
    21     //IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来。
    22     //IMREAD_COLOR(>0)表示把原图作为 RGB 图像加载进来。
    23     // opencv 支持 jpg、png、tiff 等常见的图像格式。
    24     Mat src = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_UNCHANGED);
    25 
    26     //以灰度图像的方式加载原图
    27     Mat src2 = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_GRAYSCALE);
    28 
    29     //2、创建窗口
    30     //void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE):winname 表示窗口的名称。flags 表示窗口的特性。
    31     // namedWindow:表示创建一个指定名称和特性的窗口,这个窗口用于显示图像。它是由 OpenCV 自动创建和销毁的,无需手动释放。
    32     //flags:窗口特性列表
    33     //WINDOW_AUTOSIZE:自适应图片大小,用户无法修改窗口大小。
    34     //WINDOW_FREERATIO:窗口大小自适应比例
    35     //WINDOW_FULLSCREEN:全屏显示
    36     //WINDOW_GUI_NORMAL:是绘制窗口的旧方法没有状态栏和工具栏,而WINDOW_GUI_EXPANDED是一个新的增强GUI。
    37     //WINDOW_KEEPRATIO:保持图像的比例。
    38     //WINDOW_NORMAL:跟 QT 集成的时候会使用,允许修改窗口大小。
    39     //
    40 
    41     namedWindow("OrigianImage", WINDOW_AUTOSIZE);
    42     namedWindow("GrayImage", WINDOW_AUTOSIZE);
    43 
    44     //3、显示图像
    45     //void imshow(const String& winname, InputArray mat):winname 使用 namedWindow 创建的窗口名称;mat 要显示的图像对象。
    46     //imshow:使用 namedWindow 创建的窗口,显示指定的图像。
    47 
    48     imshow("OrigianImage", src);
    49     imshow("GrayImage", src2);
    50 
    51     //4、修改图像
    52     //void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 ):src 源图像,需要转换的图像;dst 色彩空间转换后的图像;code 源色彩空间和目标色彩空间的转换方式;dstCn 
    53     //cvtColor:把图像从一个色彩空间转化为另一个色彩空间。
    54     //code 列表:
    55     //COLOR_BGR2GRAY:从 RGB 转化到 Gray,从彩色转换为灰色。
    56     //
    57 
    58     Mat des;
    59     cvtColor(src, des, COLOR_BGR2HSV);
    60 
    61     namedWindow("cvtColorImage", WINDOW_AUTOSIZE);
    62     imshow("cvtColorImage", des);
    63 
    64 
    65     //5、保存图像
    66     //imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>()):filename 要保存图片的文件名称,包含完整路径和文件名和扩展名,扩展名不同,生成的图像也不同;img 要保存的图像。
    67     //imwrite:用于保存为指定名称的图像。
    68     //只有8位、16位的 PNG、JPG、TIFF文件格式而且是单通道或者是三通道的 BGR 的图像才可以通过这种方式保存。
    69     //保存 PNG 格式的时候可以保存透明通道的图片。
    70     //可以指定压缩参数。
    71 
    72     //保存三种格式,通过后缀名实现。
    73     imwrite("D:\\ScanImages\\mypic.png",des);
    74     imwrite("D:\\ScanImages\\mypic2.jpg", des);
    75     imwrite("D:\\ScanImages\\mypic3.tif", des);
    76 
    77     waitKey(0);
    78 
    79     return 0;
    80 }

        原图代码:

    1 Mat src = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_UNCHANGED);
    2 namedWindow("OrigianImage", WINDOW_AUTOSIZE);

     

    3 imshow("OrigianImage", src);

     

        效果如图:

        

        灰度图像的代码:

    1 Mat src2 = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_GRAYSCALE);
    2 namedWindow("GrayImage", WINDOW_AUTOSIZE);
    3 imshow("GrayImage", src2);

        灰度图像如图:

        

        改变色彩空间的代码:

    1 Mat des;
    2 cvtColor(src, des, COLOR_BGR2HSV);
    3 
    4 namedWindow("cvtColorImage", WINDOW_AUTOSIZE);
    5 imshow("cvtColorImage", des);

        效果如图:

        

        其他的就不多说了,内容很简单。



    三、总结
        这是 C++ 使用 OpenCV 的第二篇文章,其实也没那么难,感觉是不是还是很好入门的,那就继续。初见成效,继续努力。皇天不负有心人,不忘初心,继续努力,做自己喜欢做的,开心就好。