HSV 即使用 色相(Hue)、饱和度(Saturation)、明度(Value) 来表示色彩的一种方式

色相:将颜色用0°到360°表示,就是我们日常讲的颜色名称,如红色、蓝色等。

色相与颜色对应关系如上

饱和度:色彩的纯度,饱和度越低色彩越暗淡(0<=S<1)

明度:即颜色的明亮程度,数值越高越接近于白色,数值越低越接近于黑色(0<=V<1)

将图像从RGB色彩空间转换到HSV色彩空间的算法如下所示:

Max = max(R,G,B)

Min = min(R,G,B)

色相

饱和度: S = Max - Min

明度:V = Max

从HSV转换到RGB空间:

HSV——>RGB

# 上 BGR2HSV 和 HSV2BGR 代码

import cv2

import numpy as np

# BGR -> HSV

def BGR2HSV(_img):

img = _img.copy() / 255.

hsv = np.zeros_like(img, dtype=np.float32)

# get max and min

max_v = np.max(img, axis=2).copy()

min_v = np.min(img, axis=2).copy()

min_arg = np.argmin(img, axis=2)

# H

hsv[..., 0][np.where(max_v == min_v)]= 0

## if min == B

ind = np.where(min_arg == 0)

hsv[..., 0][ind] = 60 * (img[..., 1][ind] - img[..., 2][ind]) / (max_v[ind] - min_v[ind]) + 60

## if min == R

ind = np.where(min_arg == 2)

hsv[..., 0][ind] = 60 * (img[..., 0][ind] - img[..., 1][ind]) / (max_v[ind] - min_v[ind]) + 180

## if min == G

ind = np.where(min_arg == 1)

hsv[..., 0][ind] = 60 * (img[..., 2][ind] - img[..., 0][ind]) / (max_v[ind] - min_v[ind]) + 300

# S

hsv[..., 1] = max_v.copy() - min_v.copy()

# V

hsv[..., 2] = max_v.copy()

return hsv

def HSV2BGR(_img, hsv):

img = _img.copy() / 255.

# get max and min

max_v = np.max(img, axis=2).copy()

min_v = np.min(img, axis=2).copy()

out = np.zeros_like(img)

H = hsv[..., 0]

S = hsv[..., 1]

V = hsv[..., 2]

C = S

H_ = H / 60.

X = C * (1 - np.abs( H_ % 2 - 1))

Z = np.zeros_like(H)

vals = [[Z,X,C], [Z,C,X], [X,C,Z], [C,X,Z], [C,Z,X], [X,Z,C]]

for i in range(6):

ind = np.where((i <= H_) & (H_ < (i+1)))

out[..., 0][ind] = (V - C)[ind] + vals[i][0][ind]

out[..., 1][ind] = (V - C)[ind] + vals[i][1][ind]

out[..., 2][ind] = (V - C)[ind] + vals[i][2][ind]

out[np.where(max_v == min_v)] = 0

out = np.clip(out, 0, 1)

out = (out * 255).astype(np.uint8)

return out

# 利用上述函数实现图像色相翻转(色相值+180,然后用 RGB色彩空间表示图片)

# Read image

img = cv2.imread("../paojie.jpg").astype(np.float32)

# RGB > HSV

hsv = BGR2HSV(img)

# Transpose Hue

hsv[..., 0] = (hsv[..., 0] + 180) % 360

# HSV > RGB

out = HSV2BGR(img, hsv)

# Save result

cv2.imwrite("out.jpg", out)

cv2.imshow("result", out)

cv2.waitKey(0)

cv2.destroyAllWindows()

原图

色相翻转后结果

rgb转hsv java_RGB图像转换成HSV图像相关推荐

  1. RGB图像转换成HSV图像,HSV图像转换为RGB图像

    HSV 即使用 色相(Hue).饱和度(Saturation).明度(Value) 来表示色彩的一种方式 色相:将颜色用0°到360°表示,就是我们日常讲的颜色名称,如红色.蓝色等. 色相与颜色对应关 ...

  2. RGB图像转换成YCbCr图像,rgb2ycbcr的使用,转换参数

    原理 YCbCr到RGB的转换 Y' = 0.257*R' + 0.504*G' + 0.098*B' + 16Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128C ...

  3. Python扩展库scipy.misc中图像转换成pillow图像

    众所周知,在数字图像处理领域中有很多基准测试图像,这些图像用来作为科研人员PK自己的算法时的参考,给大家提供一个公平的样本,针对同一个问题进行处理时,可以用这些基准图像做实验,比较常见的应该就是len ...

  4. OpenCV | OpenCV将图像转换成黑白图像(二进制)

    将图像转换为黑白涉及两个步骤. 将源图像读取为灰度图像. 使用您选择的阈值将灰度图像转换为二进制图像. 如果源图像是灰度图像,则可以将步骤1中的图像读取为原始图像,然后继续步骤2.以下示例说明了从灰度 ...

  5. Windows Forms:在C#中将图像转换成灰度图

    Windows Forms:在C#中将图像转换成灰度图 本文翻译自Windows Forms: Convert an image into grayscale in C# 这篇文章向你展示在C# Wi ...

  6. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

  7. C语言运行时变成灰色,C语言实现RGB图像转换成灰(Gray)度图像

    以前实现RGB图像转换成灰度图像都是直接调用OpenCV的库函数RGB2GRAY(IplImage* src);最近老板让我们除了读入输出图像实时用OpenCV的函数,其余的最好都是自己写,所以我自己 ...

  8. 在WPF中将图片转换成3D图像并可以旋转

    原文:在WPF中将图片转换成3D图像并可以旋转 时光偷走的,永远都是我们眼皮底下看不见的珍贵. https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ 首先先看 ...

  9. 将.mat格式的高光谱图像转换成png或jpg格式

    将.mat格式的高光谱图像转换成png或jpg格式 使用MATLAB打开.mat文件,并读取高光谱图像数据. 如果高光谱图像数据为三维矩阵,将其转置为(宽度,高度,波段数)的形式.这是因为MATLAB ...

最新文章

  1. 简单有趣的matlab小程序_超实用有趣的五个小程序推荐
  2. linux消息信号丢失,Linux信号丢失问题分析
  3. url加密解密的一个cs类
  4. Oracle 原理: 闪回 flashback
  5. [leetcode] 912.排序数组
  6. 同学你好,听说你想学习做硬件?
  7. java开发错误_每个Java开发人员都必须避免的9个安全错误
  8. 2018年,牛客网小白月赛5
  9. 初涉Linux(无代码)
  10. python创建双链表_Python双链表原理与实现方法详解
  11. panel中html怎么写,在Panel上绘制Html表?
  12. flutter 获取定位_定位Flutter内存问题如何做
  13. 40位40岁以下投资人
  14. PHP 中英文混合排版中处理字符串常用的函数
  15. CEIWEI ParallelMonitor并口监控 v3.0 并口打印机监控, 并口打开印机, 并行端口过滤, 并行端口监控, 并口过滤, 并口监控
  16. 【苹果CMS技术教程】苹果CMSV10宝塔全自动定时采集教程
  17. unity打包游戏后物体的移动速度不一样?
  18. python软件下载安装百度网盘-Python3.8.0
  19. 极雅简约小清新工作汇报PPT模板
  20. 数学图形(1.9)悬链线

热门文章

  1. 8位数控分频器的设计_实验五 数控分频器的设计
  2. 修改 dokuwiki(适合开发类的最好的wiki) 支持 editor.md(国人做的最好的markdown)编辑
  3. 计算机术语翻译在线,计算机术语翻译
  4. 28.gets与puts
  5. 微博转发话题js代码
  6. 扬创epc-ES70T linux QT开发
  7. Android Checkbox 使用
  8. 网页不能复制文字?这几招轻松解决
  9. MyG2O中平面类的学习
  10. 直线位移传感器安装注意事项