• [OpenCV学习笔记3][图像的加载+修改+显示+保存]


    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识;

    [1.学习目标]

    图像的加载:imread()

    图像的修改:cvtColor()

    图像的显示:imshow()

    图像的保存:   imwrite()

    [2.函数原型与参数说明]

     a.图像的加载:

     1 Mat imread( const string& filename, int flags=1 ); 

    参数说明:

    filename:文件盘符

    flags:flags>0,三通道彩色图   flags=0,灰度图    flags<0,包含Alpha通道的图像

    b.图像的修改:

     1 void cvCvtColor( const CvArr* src, CvArr* dst, int code ); 

    函数功能:色彩空间转换

    参数说明:

    src
            输入的 8-比特 或浮点图像.
    dst
            输出的 8-比特 或浮点图像.
    code
            色彩空间转换,通过定义 CV_<src_color_space>2<dst_color_space> 常数 (见下面).

         函数 cvCvtColor 将输入图像从一个色彩空间转换为另外一个色彩空间。函数忽略
    IplImage 头中定义的 colorModel 和 channelSeq 域,所以输入图像的色彩空间应该
    正确指定 (包括通道的顺序,对 RGB 空间而言,BGR 意味着布局为 B0 G0 R0 B1 G1 R1 ...
    层叠的 24-位格式,而 RGB 意味着布局为 R0 G0 B0 R1 G1 B1 ... 层叠的 24-位格式. 

    RGB[A]->Gray: Y=0.212671*R + 0.715160*G + 0.072169*B + 0*A (CV_RGB2GRAY) //RGB到灰度
    RGB<=>YCrCb (CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB)
    RGB=>HSV (CV_BGR2HSV,CV_RGB2HSV)
    RGB<=>XYZ (CV_BGR2XYZ, CV_RGB2XYZ, CV_XYZ2BGR, CV_XYZ2RGB):

    c.图像的显示:

     c.1:创建窗口函数cvNamedWindow

     1 int cvNamedWindow( const char* name, int flags ); 

    参数说明:

    name
             窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。
    flags
             窗口属性标志。目前唯一支持的标志是 CV_WINDOW_AUTOSIZE。当这个标志被设置后,如
            果 用 户 不 能 手 动 改 变 窗 口 大 小 , 窗 口 大 小 会 自 动 调 整 以 适 合 被 显 示 图 像 ( 参 考
            cvShowImage)。

    c.2:销毁窗口(指定/所有) cvDestroyWindow /cvDestroyAllWindows
     1 void cvDestroyWindow( const char* name ); 

    name
           要被销毁的窗口的名字。

     函数 cvDestroyWindow 销毁指定名字的窗口。

    c.3:在指定窗口中显示图像 cvShowImage 

     1 void cvShowImage( const char* name, const CvArr* image ); 

    参数说明:

    name
             窗口的名字。
    image 

            被显示的图像。

    函数 cvShowImage 在指定窗口中显示图像。如果窗口创建的时候被设定标志
    CV_WINDOW_AUTOSIZE,那么图像将以原始尺寸显示;否则,图像将被伸缩以适合窗口大
    小。

    d:保存图片到指定盘符   imwrite

     1 bool imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>()); 

    参数说明:

    filename  表示需要写入的文件名,必须要加上后缀,比如“123.png”。 

    img         表示Mat类型的图像数据。 
    params   表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),所以一般情况下不用写。

    [代码实例]

    【运行环境】OpenCV3.0 + RedHat

    【代码功能】将彩色图像转换成灰度图像保存

    #include <iostream>
    #include <cv.h>
    #include <highgui.h>
    
    using namespace cv;
    using namespace std;
    
    int main (void)
    {
       Mat src = imread("./2.jpg"); //读取2.jpg
       if(src.empty())
       {
           printf("could not load image.....
    ");
          return -1;    
       }
       namedWindow("Opencv setup deno",CV_WINDOW_AUTOSIZE);  //创建窗口
       imshow("Opencv setup deno",src);                      //显示图片到窗口
       
       namedWindow("Output windows",CV_WINDOW_AUTOSIZE);  //创建窗口
       Mat output_image;
       cvtColor(src,output_image,CV_RGB2GRAY);                     //颜色空间转换   <彩色图像---灰度图像>
       imshow("Output windows",output_image);                      //显示图片到窗口
       imwrite("./3.jpg",output_image);                 //保存图片到指定盘符
       cvWaitKey();
        return 0;    
    }

    [运行结果]

     

     12-22

  • 相关阅读:
    POJ
    luogu- P1373 小a和uim之大逃离 DP 四维,其中一维记录差值
    牛客国庆集训派对Day3 B Tree(树形dp + 组合计数)
    【CF 1059C】 Sequence Transformation 数学
    POJ
    牛客国庆集训派对Day6 A Birthday 费用流
    Treap + 无旋转Treap 学习笔记
    牛客2018国庆集训派对Day3 I Metropolis 多源最短路径
    Gym
    CodeForces
  • 原文地址:https://www.cnblogs.com/Jack-Tango/p/8341088.html
Copyright © 2020-2023  润新知