当前位置: 首页 > news >正文

OpenCV 图像色彩空间转换

一、知识点:
1、色彩空间转换函数
  (1)、void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0, AlgorithmHint hint = cv::ALGO_HINT_DEFAULT );
  (2)、将图像从一种颜色空间转换为另一种。
  (3)、参数说明:
      src: 输入图像,即要进行颜色空间变换的原图像。
      dst: 输出图像,即进行颜色空间变换后的图像。
      code: ColorConversionCodes枚举值,确定从什么颜色空间转换到什么颜色空间,如: COLOR_BGR2RGB、 COLOR_BGRA2RGBA、COLOR_BGR2GRAY、COLOR_BGR2HSV。
      dstCn: 指定目标图像的通道数,若为0,则通道数由src和code决定。
      hint: 算法提示。
  (4)、若有RGB颜色空间的转换,则必须指定通道顺序(RGB或BGR)。
  (5)、OpenCV默认RGB颜色空间的通道顺序是BGR,例如标准24位彩色图像,第一个字节是蓝色分量,第二个字节是绿色分量,第三个字节是红色分量,第四、第五、第六依次是第二个像素的蓝、绿、红分量,以此类推。
  (6)、R、G、B通道值的常规范围:
      -CV_8U是0-255
      -CV_16U是0-65535
      -CV_32F是0-1
  (7)、在非线性变换下,一个RGB颜色空间的输入图像,需先归一化到通道值范围,才能得到正确的转换结果。
  (8)、例如,有一个CV_32F图像,直接从CV_8U图像转换而来,那么在调用cvtColor前,需先将0-255的值转换为0-1的值。
      img *= 1.0 / 255;
      cvtColor(img, img, COLOR_BGR2Luv);
  (9)、如果转换添加了alpha通道,则其值将被设置为范围最大值: CV_8U是255,CV_16U为65535,CV_32F为1。
  
2、保存图像到文件
  (1)、bool imwrite( const String & filename, InputArray img, const std::vector<int> & params = std::vector<int>());
  (2)、将图像保存到指定文件。
  (3)、参数说明:
      filename: 图像要保存的文件路径名。
      img: 要保存的图像。
      params: 为特定格式保存的参数编码。
  (4)、根据文件扩展名选择图像保存格式。
  (5)、一般imwrite只保存CV_8U单通道或3通道(BGR通道顺序)图像。 
      但有特殊情况: 如对于PNG、TIFF、JPEG格式,可以保存CV_16U图像,还有很多情况见imwrite()接口注释。
      不支持的图像格式,imwrite将图像转为CV_8U并以这种方式保存。
  (6)、如果格式、深度、通道顺序不同,可以用convertTo和cvtColor在保存之前进行转换。
  
3、HSV颜色空间
  (1)、H: 色相,即什么颜色,opencv中取值范围[0, 180]。
  (2)、S: 饱和度,即颜色有多深,opencv中取值范围[0, 255]。
  (3)、V: 色调、纯度、亮度,即颜色有多亮,opencv中取值范围[0, 255]。
  
  
二、示例代码:

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::Mat srcImg = cv::imread("C:\\Users\\ml\\Desktop\\Test\\MyOpenCVTest\\images\\1.png");if (srcImg.empty()){std::cout << "Could not load image..." << std::endl;return -1;}cv::imshow("原始图像", srcImg);cv::Mat grayImg;cv::cvtColor(srcImg, grayImg, cv::COLOR_BGR2GRAY);cv::imshow("gray图像", grayImg);cv::imwrite("C:\\Users\\ml\\Desktop\\Test\\MyOpenCVTest\\images\\1_gray.png", grayImg);cv::Mat hsvImg;cv::cvtColor(srcImg, hsvImg, cv::COLOR_BGR2HSV);cv::imshow("hsv图像", hsvImg);cv::imwrite("C:\\Users\\ml\\Desktop\\Test\\MyOpenCVTest\\images\\1_hsv.png", hsvImg);cv::waitKey(0);cv::destroyAllWindows();return 0;
}

http://www.xdnf.cn/news/547669.html

相关文章:

  • Yersinia:layer 2攻击框架!全参数详细教程!Kali Linux教程!
  • jieba分词
  • PCB设计教程【入门篇】——电路分析基础-基本元件(二极管三极管场效应管)
  • 可视化图解算法42:寻找峰值
  • Cribl 中 Parser 扮演着重要的角色 + 例子
  • 鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍
  • RustDesk CentOS自建中继节点
  • Linux 特权管理与安全——从启用 Root、Sudo 提权到禁用与防护的全景解析
  • WebRTC技术EasyRTC音视频实时通话驱动智能摄像头迈向多场景应用
  • 轻量级高性能推理引擎MNN 学习笔记 04.线性回归
  • C语言| 指针变量的初始化
  • OpenHarmony开源鸿蒙兼容性测试常见问题解答分享
  • 使用 Qt Designer 开发
  • [ARM][汇编] 02.ARM 汇编常用简单指令
  • HOW - 结合 AI 进行 Tailwind 样式开发
  • Secarmy Village: Grayhat Conference靶场
  • SpringMVC所有注解按照使用位置划分
  • 基于matlabcd7.x的无网格近似方法
  • CSS 样式表的四种应用方式详解以及css注释的应用
  • TypeScript与JavaScript的异同
  • MySQL:to many connections连接数过多
  • 指令烧录ORIN NANO操作系统
  • RocketMQ实战—订单系统面临的技术挑战
  • 开放鸿蒙OpenHarmony 5.0.0 Release 兼容性测试实战经验分享
  • 工业数据治理标准规范深度解析
  • 大模型应用开发“扫盲”——基于市场某款智能问数产品的技术架构进行解析与学习
  • 解决git中断显示中文为八进制编码问题
  • 设计模式 - 工厂模式
  • 中断全攻略:单片机优先级与 NVIC 详解(超形象解释)
  • Kubernetes中微服务JVM监控与自动发现的解决方案