一、颜色模型

1.1 rgb颜色模型

1.2 hsv颜色模型


hsv颜色模型具有以下优点:
1.符合人眼对颜色的感觉;
2.hsv颜色模型中hsv三个坐标是相互独立的:当采用rgb颜色模型时,改变某一颜色的属性,比如改变色调就必须改变rgb三个坐标;而采用hsv颜色模型时只需改变h坐标;
3.HSV颜色模型构成的是一个均匀的颜色空间,采用线性的标尺,彩色之间感觉上的距离与HSV颜色模型坐标上点的欧几里德距离成正比。

二、hsv转rgb算法(数学公式法)

三、实验一

通过拖动hsv三个滑块,计算与hsv对应的rgb三个分量,并显示在对应的文本框中。根据rgb三个分量的值,改变界面上方文本框的背景颜色。(注意:因为qt中滑块移动步长只能为整数,所以在ui界面中设置sv两个分量的滑动范围是[0, 100],在程序编写中,要将通过滑块滑动得到的值除以100)

3.1 ui设计

3.2 代码实现

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();typedef struct{float h;float s;float v;}color_hsv_t;color_hsv_t hsv_t;typedef struct{uchar r;uchar g;uchar b;}color_rgb_t;color_rgb_t rgb_t;void hsv2rgb(color_hsv_t* hsv, color_rgb_t* rgb);private slots:void on_horizontalSlider_valueChanged(int value);void on_horizontalSlider_2_valueChanged(int value);void on_horizontalSlider_3_valueChanged(int value);private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

.c文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include "math.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QString h = QString::number(ui->horizontalSlider->value());QString s = QString::number(ui->horizontalSlider_2->value());QString v = QString::number(ui->horizontalSlider_3->value());ui->textEdit->setText(h);ui->textEdit_2->setText(s);ui->textEdit_3->setText(v);hsv_t.h = ui->horizontalSlider->value();hsv_t.s = ui->horizontalSlider_2->value()/100.0;hsv_t.v = ui->horizontalSlider_3->value()/100.0;hsv2rgb(&hsv_t, &rgb_t);QString r = QString::number(rgb_t.r);QString g = QString::number(rgb_t.g);QString b = QString::number(rgb_t.b);ui->textEdit_4->setText(r);ui->textEdit_5->setText(g);ui->textEdit_6->setText(b);QString style = "background-color: rgb("+ r +","+ g +","+ b +");";ui->textBrowser->setStyleSheet(style);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_horizontalSlider_valueChanged(int value)
{QString h = QString::number(ui->horizontalSlider->value());QString s = QString::number(ui->horizontalSlider_2->value());QString v = QString::number(ui->horizontalSlider_3->value());ui->textEdit->setText(h);ui->textEdit_2->setText(s);ui->textEdit_3->setText(v);hsv_t.h = ui->horizontalSlider->value();hsv_t.s = ui->horizontalSlider_2->value()/100.0;hsv_t.v = ui->horizontalSlider_3->value()/100.0;hsv2rgb(&hsv_t, &rgb_t);QString r = QString::number(rgb_t.r);QString g = QString::number(rgb_t.g);QString b = QString::number(rgb_t.b);ui->textEdit_4->setText(r);ui->textEdit_5->setText(g);ui->textEdit_6->setText(b);QString style = "background-color: rgb("+ r +","+ g +","+ b +");";ui->textBrowser->setStyleSheet(style);
}void MainWindow::on_horizontalSlider_2_valueChanged(int value)
{QString h = QString::number(ui->horizontalSlider->value());QString s = QString::number(ui->horizontalSlider_2->value());QString v = QString::number(ui->horizontalSlider_3->value());ui->textEdit->setText(h);ui->textEdit_2->setText(s);ui->textEdit_3->setText(v);hsv_t.h = ui->horizontalSlider->value();hsv_t.s = ui->horizontalSlider_2->value()/100.0;hsv_t.v = ui->horizontalSlider_3->value()/100.0;hsv2rgb(&hsv_t, &rgb_t);QString r = QString::number(rgb_t.r);QString g = QString::number(rgb_t.g);QString b = QString::number(rgb_t.b);ui->textEdit_4->setText(r);ui->textEdit_5->setText(g);ui->textEdit_6->setText(b);QString style = "background-color: rgb("+ r +","+ g +","+ b +");";ui->textBrowser->setStyleSheet(style);
}void MainWindow::on_horizontalSlider_3_valueChanged(int value)
{QString h = QString::number(ui->horizontalSlider->value());QString s = QString::number(ui->horizontalSlider_2->value());QString v = QString::number(ui->horizontalSlider_3->value());ui->textEdit->setText(h);ui->textEdit_2->setText(s);ui->textEdit_3->setText(v);hsv_t.h = ui->horizontalSlider->value();hsv_t.s = ui->horizontalSlider_2->value()/100.0;hsv_t.v = ui->horizontalSlider_3->value()/100.0;hsv2rgb(&hsv_t, &rgb_t);QString r = QString::number(rgb_t.r);QString g = QString::number(rgb_t.g);QString b = QString::number(rgb_t.b);ui->textEdit_4->setText(r);ui->textEdit_5->setText(g);ui->textEdit_6->setText(b);QString style = "background-color: rgb("+ r +","+ g +","+ b +");";ui->textBrowser->setStyleSheet(style);
}
/** h[0, 360]* s[0, 1]* v[0, 1]
*/
void MainWindow::hsv2rgb(color_hsv_t* hsv, color_rgb_t* rgb){int i;float f, a, b, c;float h = hsv->h;float s = hsv->s;float v = hsv->v;if(h >= 360){h = 0;}if(s == 0){rgb->r = (uchar)(v*255);rgb->g = (uchar)(v*255);rgb->b = (uchar)(v*255);}else{h /= 60.0;i = (int)floor(h);f = h - i;a = v*(1-s);b = v*(1-s*f);c = v*(1-s*(1-f));switch(i) {case 0:rgb->r = (uchar)((int)(v*255)); //v*255rgb->g = (uchar)((int)(c*255)); //c*255;rgb->b = (uchar)((int)(a*255)); //a*255;break;case 1:rgb->r = (uchar)((int)(b*255)); //b*255;rgb->g = (uchar)((int)(v*255)); //v*255;rgb->b = (uchar)((int)(a*255)); //a*255;break;case 2:rgb->r = (uchar)((int)(a*255)); //a*255;rgb->g = (uchar)((int)(v*255)); //v*255;rgb->b = (uchar)((int)(c*255)); //c*255;break;case 3:rgb->r = (uchar)((int)(a*255));//a*255;rgb->g = (uchar)((int)(b*255));//b*255;rgb->b = (uchar)((int)(v*255));//v*255;break;case 4:rgb->r = (uchar)((int)(c*255)); //c*255;rgb->g = (uchar)((int)(a*255)); //a*255;rgb->b = (uchar)((int)(v*255)); //v*255;break;default:rgb->r = (uchar)((int)(v*255)); //v*255;rgb->g = (uchar)((int)(a*255)); //a*255;rgb->b = (uchar)((int)(b*255)); //b*255;break;}}
}

3.3 实验效果

【QT数字图像处理】(四)hsv颜色空间转rgb颜色空间相关推荐

  1. 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSV颜色空间转换

    RGB颜色空间与HSV颜色空间转换 RGB颜色空间与HSV颜色空间转换 1. 前言 2. RGB颜色空间与HSV颜色空间转换描述 3. 代码实现 1. 前言 HSV(Hue, Saturation, ...

  2. HSV颜色空间和RGB颜色空间相互转换C语言实现

    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model).这个模型中颜色的参数 ...

  3. 【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码

    系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一.HSV 和 RGB 颜色空间 二.颜色转化 1. RGB to HSV 2. HSV to RGB 三. 完整代码 ...

  4. 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSL颜色转换

    RGB颜色空间与HSL颜色转换 RGB颜色空间与HSL颜色转换 1. 前言 2. RGB颜色空间与HSL颜色转换描述 3. 程序实现 1. 前言 HSL是一种将RGB色彩模型中的点在圆柱坐标系中的表示 ...

  5. 【QT数字图像处理】(三)QSlider滑块学习

    实验二的要求是编程实现RGB彩色空间到HSV彩色空间的转换,并通过调整H.S.V实现图像色度.色饱和度和亮度的调节.在开始实验二之前,我们先来学习一下关于QSlider滑块的操作. 最后要实现的效果如 ...

  6. python数字图像处理(四) 频率域滤波

    import matplotlib.pyplot as plt import numpy as np import cv2 %matplotlib inline 首先读入这次需要使用的图像 img = ...

  7. Win8 Metro(C#)数字图像处理--4图像颜色空间描述

    原文:Win8 Metro(C#)数字图像处理--4图像颜色空间描述  图像颜色空间是图像颜色集合的数学表示,本小节将针对几种常见颜色空间做个简单介绍. /// <summary>// ...

  8. python中颜色空间直方图_OpenCV—python 颜色空间(RGB,HSV,Lab)与 颜色直方图

    一.图像分类的过程 image.png 图片必须经过标注 图片的类别为有限的集合,如{猫.狗.牛.马.狼} 每个类别的图片数量接近,如果不同类别图片的数量差异很大,训练出来的分类器容易倾向于图片数量多 ...

  9. RGB颜色空间转换HSV颜色空间 RGB2HSV算法

    这是最常用的RGB到HSV例程,还有一个额外的小优化(向除数添加1e-20f以避免需要将除法除以零): 讲解:--------------action---------------- 直接看这段代码很 ...

最新文章

  1. nginx安装-添加MP4播放模块
  2. thinkphp3.2 学习
  3. 【自动驾驶】9.分布式通信技术之发布订阅,干货满满
  4. Ubuntu系统如何安装nodejs及npm
  5. 计算机基础应用模拟试题,计算机基础应用模拟试题5
  6. Javascript模块化编程系列二: 模块化的标准化(CommonJS AMD)
  7. plantuml 方法图_plantuml画流程图
  8. vue中v-model的使用
  9. vue 事件上加阻止冒泡 阻止默认事件
  10. [解题报告]HDU 2019 数列有序!
  11. 少儿编程、软硬编程课件、创意Scratch的项目小游戏,可单独上一节课
  12. Android 8.0 安装Google服务
  13. phpredis中文手册
  14. 产业数字化转型升级案例:联合利华数字化供应链管理
  15. web服务器种类汇集
  16. 使用OpenCV读取摄像头图像并显示
  17. PowerTool kEvP.sys=V4.2 内核拒绝服务漏洞
  18. 【专栏】国内外物联网平台初探(篇三:QQ物联·智能硬件开放平台)
  19. 联想计算机的控制面板在哪,Win10创意者的控制面板在哪?
  20. Java用栈实现排序_Java中的栈排序

热门文章

  1. 精简版WIN10 LTSB LTSC安装Microsoft Store
  2. cryptoJS 安装与使用
  3. 一、Jmeter下载+配置
  4. 内网离线 k3s Rancher 高可用安装部署流程
  5. Windchill测试类编写
  6. 电脑重装系统装不了如何解决
  7. 计算机作业win7操作流程,win7电脑硬盘进行分区的操作流程
  8. 面朝大海,春暖花开---令人难以忘怀的诗
  9. 『-琼海-』人生感悟四则(转载)
  10. 省选模拟赛(正睿的最后一场)