OpenCV颜色变换cvtColor

打印 上一主题 下一主题

主题 1514|帖子 1514|积分 4552

OpenCV盘算机视觉开辟实践:基于Qt C++ - 商品搜索 - 京东
颜色变换是imgproc模块中一个常用的功能。我们生存中看到的大多数彩色图片都是RGB类型的,但是在举行图像处理时需要用到灰度图、二值图、HSV(六角锥体模子,这个模子中颜色的参数分别是色调H、饱和度S、明度V)、HSI等颜色制式,对此OpenCV提供了cvtColor()函数来实现这些功能,这个函数用来举行颜色空间的转换。随着OpenCV版本的升级,对于颜色空间种类的支持也越来越多,因此涉及差异颜色空间之间的转换,比如RGB和灰度的互转、RGB和HSV的互转等。
cvtColor函数声明如下:
  1. void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
复制代码
参数阐明如下:


  • src:用于输入图像,即要举行颜色空间变换的原图像,可以是Mat类。
  • OutputArray dst:用于输出图像,即举行颜色空间变换后存储的图像,也可以是Mat类。
  • code:表示转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片。
  • dstCn:表示目的图像通道数,默认取值为0,假如取值为0,就由src和code决定。
  • InputArray和OutputArray:都是接口类,它们可以是Mat、Mat_<T>、Mat_<T, m, n>、vector<T>、vector<vector<T>>和vector<Mat>。
函数cvtColor的作用是将一个图像从一个颜色空间转换到另一个颜色空间,但是当从RGB向其他类型转换时,必须明确指出图像的颜色通道。值得留意的是,在OpenCV中,默认的颜色制式分列是BGR而非RGB。因此,对于24位颜色图像来说,前8位是蓝色,中间8位是绿色,最后8位是赤色。
需要留意的是,cvtColor()函数不能直接将RGB图像转换为二值图像,需要借助threshold函数。
我们常用的颜色空间转换有两种:BGR转为灰度图和BGR转为HSV。下面来看一个例子,将图像转换为灰度图和HSV。
【例4.1】将图像转换为灰度图和HSV
   打开Qt Creator,新建一个控制台工程,工程名是test。
   在IDE中打开main.cpp,输入如下代码:
  1. #include <QDebug>
  2. #include <opencv2/imgproc/types_c.h> // for CV_RGB2GRAY
  3. #include <opencv2/core.hpp>
  4. #include <opencv2/highgui.hpp>
  5. #include <opencv2/imgproc.hpp>
  6. using namespace cv;
  7. int main()
  8. {
  9.         Mat srcImage = imread("sky.jpg");
  10.         // 判断图像是否加载成功
  11.         if (!srcImage.data)
  12.         {
  13.                 qDebug() << "图像加载失败!";
  14.                 return false;
  15.         }
  16.         else
  17.                 qDebug()<< "图像加载成功!";
  18.         // 显示原图像
  19.         namedWindow("src", WINDOW_AUTOSIZE);
  20.         imshow("src", srcImage);
  21.         // 将图像转换为灰度图,采用CV_前缀
  22.         Mat grayImage;
  23.         cvtColor(srcImage, grayImage, CV_RGB2GRAY);     // 将图像转换为灰度图
  24.         namedWindow("gray", WINDOW_AUTOSIZE);
  25.         imshow("gray", grayImage);
  26.         // 将图像转换为HSV,采用COLOR_前缀
  27.         Mat HSVImage;
  28.         cvtColor(srcImage, HSVImage, COLOR_BGR2HSV);    // 将图像转换为HSV
  29.         namedWindow("HSV", WINDOW_AUTOSIZE);
  30.         imshow("HSV", HSVImage);
  31.         waitKey(0);
  32.         return 0;
  33. }
复制代码
保存工程并运行,效果如图4-1所示。

图4-1



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表