初学opencv c++学习笔记(二)图像空间色彩转换cvtColor()

对图像的色彩转换用到cvtColor()函数,本章将对此其用法进行解析。

文章目录

  • 目录

    文章目录

    一、色彩空间转换

    官方定义

     函数参数解释

    代码演示

    RGB——HSV  RGB——GRAY

     BGR——RGB

    总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、色彩空间转换

APL:cvtColor()


官方定义

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

 函数参数解释

1.src(source):输入的源图像。为矩阵形式。

2.dst(destination):输出的目标图像,即经过色彩转后我们需要得到的图像。也为矩阵形式。

3.code:颜色空间转换的标识符,表示我们所要进行空间转换的结果。

  code的参数多达200多,在此列举一些常用的参数,更多参数请查阅opencv官方文档

空间转换 标识符 code
BGR——灰度 COLOR_BGR2GRAY 6
RGB——灰度

COLOR_RGB2GRAY

7
灰度——RGB/BGR

 COLOR_GRAY2RGB  

= COLOR_GRAY2BGR

8
BGR——HSV COLOR_BGR2HSV 40
RGB——HSV     COLOR_RGB2HSV       41
HSV——BGR    COLOR_HSV2BGR       54
HSV——RGB   COLOR_HSV2RGB      55

BGR——RGB

RGB——BGR

COLOR_BGR2RGB    

 =  COLOR_RGB2BGR 

4

    注意!此处有知识点!在opencv中彩色图像(RGB图像)按照BGR顺序进行存储。

               所以以彩色图像为源图像进行颜色空间转换时,注意是“BGR2   ”

4.dstCn:目标图像的通道数。

               默认值为0,表示目标图像取源图像的通道数

代码演示

RGB——HSV  RGB——GRAY

#include
#include

using namespace std;
using namespace cv;
int main(int argc, char** argv)
    {          
     Mat str = imread("C:/素材/11.jpg");//读取图片,定义Mat类型,不设置imread的第二个参数默认读入彩色图片
     Mat imghsv,imggray;//定义目标图像

     cvtColor(str,imghsv,COLOR_BGR2HSV);//将str转换为HSV图像保存在imghsv中
     cvtColor(str, imggray, COLOR_BGR2GRAY);//将str转换为GRAY图像,保存在imggray中

     if (str.empty())//判断是否找到图片
     {
         printf(“没有找到图片”);
         return -1;
     }
     else
     {
                            //WINDOW_FREERATIO显示的大小可以自由更改
                            //WINDOW_AUTOSIZE显示大小为图片自定义大小,不可更改
         namedWindow("原图”, WINDOW_FREERATIO);
         imshow("原图”,str);//显示源图片

         namedWindow("HSV图像”, WINDOW_FREERATIO);
         imshow("HSV图像”, imghsv);//显示HSV图像

         namedWindow("GRAY图像”, WINDOW_FREERATIO);
         imshow("GRAY图像”, imggray);//显示GRAY图像

         waitKey(0);//显示的毫秒时间,函数参数>0表示显示的时间,否则为一直显示
         
         destroyAllWindows();//销毁所有窗口
     }

    return 0;
    }

 BGR——RGB

#include
#include

using namespace std;
using namespace cv;
int main(int argc, char** argv)
    {           
     Mat str = imread("C:/素材/11.jpg"),imgRGB;

     cvtColor(str, imgRGB, COLOR_BGR2RGB);

     if (str.empty())//判断是否找到图片
     {
         printf("没有找到图片");
         return -1;
     }
     else
     {
         imshow("RGB图像", imgRGB);

         waitKey(0);
     }
     return 0;
    }

彩色图像三通道顺序变化(还挺好看)


总结

以上就是颜色空间转换的内容,大家快动手试试叭!欢迎在评论区交流~

你可能感兴趣的:(c++,opencv,学习)