rgb转hsv java_RGB图像转换成HSV图像
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图像相关推荐
- RGB图像转换成HSV图像,HSV图像转换为RGB图像
HSV 即使用 色相(Hue).饱和度(Saturation).明度(Value) 来表示色彩的一种方式 色相:将颜色用0°到360°表示,就是我们日常讲的颜色名称,如红色.蓝色等. 色相与颜色对应关 ...
- 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 ...
- Python扩展库scipy.misc中图像转换成pillow图像
众所周知,在数字图像处理领域中有很多基准测试图像,这些图像用来作为科研人员PK自己的算法时的参考,给大家提供一个公平的样本,针对同一个问题进行处理时,可以用这些基准图像做实验,比较常见的应该就是len ...
- OpenCV | OpenCV将图像转换成黑白图像(二进制)
将图像转换为黑白涉及两个步骤. 将源图像读取为灰度图像. 使用您选择的阈值将灰度图像转换为二进制图像. 如果源图像是灰度图像,则可以将步骤1中的图像读取为原始图像,然后继续步骤2.以下示例说明了从灰度 ...
- Windows Forms:在C#中将图像转换成灰度图
Windows Forms:在C#中将图像转换成灰度图 本文翻译自Windows Forms: Convert an image into grayscale in C# 这篇文章向你展示在C# Wi ...
- python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化
python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...
- C语言运行时变成灰色,C语言实现RGB图像转换成灰(Gray)度图像
以前实现RGB图像转换成灰度图像都是直接调用OpenCV的库函数RGB2GRAY(IplImage* src);最近老板让我们除了读入输出图像实时用OpenCV的函数,其余的最好都是自己写,所以我自己 ...
- 在WPF中将图片转换成3D图像并可以旋转
原文:在WPF中将图片转换成3D图像并可以旋转 时光偷走的,永远都是我们眼皮底下看不见的珍贵. https://pan.baidu.com/s/14dk-OU2SR0nxXj2bL4bVpQ 首先先看 ...
- 将.mat格式的高光谱图像转换成png或jpg格式
将.mat格式的高光谱图像转换成png或jpg格式 使用MATLAB打开.mat文件,并读取高光谱图像数据. 如果高光谱图像数据为三维矩阵,将其转置为(宽度,高度,波段数)的形式.这是因为MATLAB ...
最新文章
- 简单有趣的matlab小程序_超实用有趣的五个小程序推荐
- linux消息信号丢失,Linux信号丢失问题分析
- url加密解密的一个cs类
- Oracle 原理: 闪回 flashback
- [leetcode] 912.排序数组
- 同学你好,听说你想学习做硬件?
- java开发错误_每个Java开发人员都必须避免的9个安全错误
- 2018年,牛客网小白月赛5
- 初涉Linux(无代码)
- python创建双链表_Python双链表原理与实现方法详解
- panel中html怎么写,在Panel上绘制Html表?
- flutter 获取定位_定位Flutter内存问题如何做
- 40位40岁以下投资人
- PHP 中英文混合排版中处理字符串常用的函数
- CEIWEI ParallelMonitor并口监控 v3.0 并口打印机监控, 并口打开印机, 并行端口过滤, 并行端口监控, 并口过滤, 并口监控
- 【苹果CMS技术教程】苹果CMSV10宝塔全自动定时采集教程
- unity打包游戏后物体的移动速度不一样?
- python软件下载安装百度网盘-Python3.8.0
- 极雅简约小清新工作汇报PPT模板
- 数学图形(1.9)悬链线