OpenCV的函数cvtcolor()的原型如下:
C++原型:

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

Python原型如下:

dst  = cv.cvtColor(src, code[, dst[, dstCn]])

参数src代表输入图像,图像深度可以为8位无符号,16位无符号,单精度浮点型。
参数dst代表输出图像,它与输入图像有相同的尺寸和深度。
参数code代表作何种转换,即转换码,可以作哪些转换大家直接去下面这个页面查看吧,博主粗略数了下,大约有200种转换,所以这里就不列举了。
https://docs.opencv.org/4.1.2/d8/d01/group__imgproc__color__conversions.html#ga4e0972be5de079fed4e3a10e24ef5ef0
参数dstCn代表输出图像的通道数,如果使用默认值0,则输出图像的通道数由输入图像和转换码共同决定。

接下来,说回标题,即“利用OpenCV的函数cvtcolor()进行颜色空间转换时需要注意的地方”,那需要注意什么呢?在线性变换的情况下,输入图像每一个像素点的取值范围无关紧要。但是在非线性变换的情况下,输入的图像应该被归一化到适当的值范围以获得正确的结果,例如,对于 RGB→LUV 变换最好在变换前进行归一化处理,避免出现由于范围值不当引起的问题。

相关代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
# 图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601
# OpenCV的版本为4.1import cv2 as cv
import sys
import numpy as npif __name__ == '__main__':# 读取图像并判断是否读取成功img = cv.imread('../images/BaoXiaofeng.jpg')if img is None:print('Failed to read BaoXiaofeng.jpg.')sys.exit()else:# 将图像进行颜色空间转换# 颜色空间转换前先进行范围归一化处理,避免后续运算出现莫名其妙的问题image = img.astype('float32')image *= 1.0 / 255# 使用cvtColor()函数进行颜色空间转换HSV = cv.cvtColor(image, cv.COLOR_BGR2HSV)YUV = cv.cvtColor(image, cv.COLOR_BGR2YUV)Lab = cv.cvtColor(image, cv.COLOR_BGR2Lab)GRAY = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

如果需要C++代码,可参看我之前的博文:
利用cvtColor实现图像颜色空间的转换-比如RGB转灰度图等
注意上面链接的博文提供的C++代码在颜色空间转换前是没有进行归一化处理的。

接下来说上面的Python代码中用于数据类型转换的astype()函数。这个函数是Python的numpy库中的,用于对阵列的数据类型进行转换。比如在上面的代码中,实现了从uint8到float32的转换。如下图所示:

其原型如下:

dst = ndarray.astype(dtype[, order='K'[, casting='unsafe'[, subok=True[, copy=True]]]])

先说下其名称中的字母“as”是怎么来的。这个函数的作用的英文表述为“Copy of the array, cast to a specified type.”取其中的单词array和specified的首字母,就有了“as”。
下面说其参数意义:
dtype—转换后阵列的数据类型。

order—数据在内存中的存储顺序。可取值有‘C’, ‘F’, ‘A’, ‘K’。C表示按C语言的顺序存储;F表示按Fortran语言的顺序存储;A表示如果所有阵列都是连续的,则按Fortran语言的顺序存储;K表示让阵列元素的存储尽可能相近。默认值为“K”

casting—表示什么样的数据转换被允许。可取值有‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’。‘no’表示不允许数据转换;‘equiv’表示只允许按字节顺序更改;‘safe’表示只允许可以保留值的强制转换;‘same_kind’表示只允许安全的转换或同一类型之间的转换(比如float64 to float32);‘unsafe’表求任何类型的转换都被允许。默认值是‘unsafe’,之所以默认值定为‘unsafe’,一个重要原因是为了程序能向后兼容。

subok—表示子类是否也被转换。如果值为True,那么子类也被转换,如果值为False,那么子类不被转换。有点像Linux系统修改文件夹权限属性时是否也应用到子文件和子文件夹中。

copy—表示返回阵列是新分配的内存空间还是就用输入阵列的内存空间。如果是True,则新分配内存空间。如果是False,则用输入阵列的内存空间。

上面就是各个参数的意义,一般情况下,除了dtype参数按自己的需求设定外,其余参数采用默认值即可。

利用OpenCV的函数cvtcolor()进行颜色空间转换时需要注意的地方相关推荐

  1. Windows 下 C++ 利用 OpenCV glob 函数获取文件夹下所有文件绝对路径

    绪论 本文记录 Windows 下 C++ 利用 OpenCv glob 函数得到 文件夹下所有文件的绝对路径(含文件名).本文还含有 std::string::find()等函数的记录.如果是 Py ...

  2. opencv图像处理:一、颜色空间转换

    一.简介 opencv有超150种颜色空间转换,在这里我们主要介绍2种经常用到的颜色空间转换(RGB->GRAY, RGB->HSV). HVS色相取值范围[0, 179],亮度取值范围[ ...

  3. 利用OpenCV的函数mean()和meanStdDev()计算图像的均值和标准差

    利用OpenCV的函数mean()和meanStdDev()计算图像的均值和标准差 函数mean()的原型和介绍如下: 函数meanStdDev()的原型和介绍如下: 可见,这两个函数的使用是很简单的 ...

  4. 利用OpenCV的函数matchTemplate()实现在图像中寻找、检索、搜索模板图像【图像模板匹配】

    利用OpenCV的函数matchTemplate()实现在图像中寻找.检索.搜索模板图像[图像模板匹配] 在博文 https://www.hhai.cc/thread-220-1-1.html 中我们 ...

  5. 利用OpenCV的函数putText()为图像添加数值型文本内容

    OpenCV的函数putText()的原型如下: C++原型: void cv::putText(InputOutputArray img,const String & text,Point ...

  6. 图像或轮廓的Hu矩的定义、优缺点、适用范围,并利用OpenCV的函数HuMoments()和matchShapes()实现Hu矩的计算和轮廓匹配

    本文承接博主的上一篇博文: 什么叫图像或轮廓的空间矩.中心矩.归一化中心矩?并利用OpenCV的类Moments计算轮廓的这几个矩和质心位置 继续介绍Hu矩的相关知识. Hu矩是由二阶和三阶中心距计算 ...

  7. 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作

    图像形态学中两种最基本的操作就是对图形的腐蚀和膨胀,可以说,形态学中的中高级操作都是建立在这两种操作之上.通过这两种基本的运算可以去除图像中的噪声,分割出独立的区域或者将两个区域连接在一起. 关于图像 ...

  8. Opencv的RGB到HSV颜色空间转换

    从 RGB 到 HSL 或 HSV 的转换 设 (r, g, b) 分别是一个颜色的红.绿和蓝坐标,它们的值是在 0 到 1 之间的实数.设 max 等价于 r, g 和 b 中的最大者.设 min ...

  9. 利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理

    如果一幅图像的灰度值集中在某个比较窄的区域,则图像的对比度会显得比较小,不便于对图像的分析和处理. 图像的直方图均衡化可以实现将原图像的灰度值范围扩大,这样图像的对比度就得到了提高,从而方便对图像进行 ...

最新文章

  1. SAP Spartacus Ngrx 使用的一些准则
  2. Silverlight进度条控件动画源代码
  3. MySql数据类型分析(字符类型) Part4
  4. Android背景图片设置
  5. 图片和Base64编码相互转换
  6. java word转pdf_Java中Word转PDF解决方案
  7. java之jsoup爬虫
  8. VScode环境变量配置
  9. Python使用 opencv对CT图进行医学处理
  10. 君正 X1000 音频驱动架构
  11. 病毒木马查杀实战第022篇:txt病毒研究
  12. 正式赛1010 羊村村长选举
  13. 反向传播计算前级delta时,后级delta去掉常数偏置参数delta0的原因
  14. vex机器人 亚洲公开赛_VEX机器人亚洲公开赛,乐博乐博学员勇夺双料冠军!
  15. 自由人NFT元农(Meta Agriculture)发行计划
  16. 互联网工作 常用名词及基础知识扫盲
  17. C++没落了?学习C++没有前途了?从业者给你揭晓答案
  18. WS2812B灯带驱动实验
  19. 多线程异常处理:挖掘页面空窗背后的原因
  20. 【LEACH协议】粒子群算法改进LEACH协议【含Matlab源码 2052期】

热门文章

  1. python装饰器实例-基于Python 装饰器装饰类中的方法实例
  2. python编程能干什么-Python编程一般可以用来做什么
  3. pythonapp下载-python编程狮app下载
  4. python视频教程云盘-Python自动化测试视频教程【百度云盘下载】
  5. 为什么叫python编程-中小学生为什么要学Python编程
  6. 学python要多少钱-python学习费用多少合适
  7. python绘制散点图-matplotlib在python上绘制3D散点图实例详解
  8. python爬虫正则表达式实例-python爬虫学习三:python正则表达式
  9. python语言入门w-Python完全小白入门指南
  10. python语言培训班-学python培训班需要多久?深圳Python培训