【QT数字图像处理】(四)hsv颜色空间转rgb颜色空间
一、颜色模型
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颜色空间相关推荐
- 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSV颜色空间转换
RGB颜色空间与HSV颜色空间转换 RGB颜色空间与HSV颜色空间转换 1. 前言 2. RGB颜色空间与HSV颜色空间转换描述 3. 代码实现 1. 前言 HSV(Hue, Saturation, ...
- HSV颜色空间和RGB颜色空间相互转换C语言实现
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model).这个模型中颜色的参数 ...
- 【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码
系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一.HSV 和 RGB 颜色空间 二.颜色转化 1. RGB to HSV 2. HSV to RGB 三. 完整代码 ...
- 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSL颜色转换
RGB颜色空间与HSL颜色转换 RGB颜色空间与HSL颜色转换 1. 前言 2. RGB颜色空间与HSL颜色转换描述 3. 程序实现 1. 前言 HSL是一种将RGB色彩模型中的点在圆柱坐标系中的表示 ...
- 【QT数字图像处理】(三)QSlider滑块学习
实验二的要求是编程实现RGB彩色空间到HSV彩色空间的转换,并通过调整H.S.V实现图像色度.色饱和度和亮度的调节.在开始实验二之前,我们先来学习一下关于QSlider滑块的操作. 最后要实现的效果如 ...
- python数字图像处理(四) 频率域滤波
import matplotlib.pyplot as plt import numpy as np import cv2 %matplotlib inline 首先读入这次需要使用的图像 img = ...
- Win8 Metro(C#)数字图像处理--4图像颜色空间描述
原文:Win8 Metro(C#)数字图像处理--4图像颜色空间描述 图像颜色空间是图像颜色集合的数学表示,本小节将针对几种常见颜色空间做个简单介绍. /// <summary>// ...
- python中颜色空间直方图_OpenCV—python 颜色空间(RGB,HSV,Lab)与 颜色直方图
一.图像分类的过程 image.png 图片必须经过标注 图片的类别为有限的集合,如{猫.狗.牛.马.狼} 每个类别的图片数量接近,如果不同类别图片的数量差异很大,训练出来的分类器容易倾向于图片数量多 ...
- RGB颜色空间转换HSV颜色空间 RGB2HSV算法
这是最常用的RGB到HSV例程,还有一个额外的小优化(向除数添加1e-20f以避免需要将除法除以零): 讲解:--------------action---------------- 直接看这段代码很 ...
最新文章
- nginx安装-添加MP4播放模块
- thinkphp3.2 学习
- 【自动驾驶】9.分布式通信技术之发布订阅,干货满满
- Ubuntu系统如何安装nodejs及npm
- 计算机基础应用模拟试题,计算机基础应用模拟试题5
- Javascript模块化编程系列二: 模块化的标准化(CommonJS AMD)
- plantuml 方法图_plantuml画流程图
- vue中v-model的使用
- vue 事件上加阻止冒泡 阻止默认事件
- [解题报告]HDU 2019 数列有序!
- 少儿编程、软硬编程课件、创意Scratch的项目小游戏,可单独上一节课
- Android 8.0 安装Google服务
- phpredis中文手册
- 产业数字化转型升级案例:联合利华数字化供应链管理
- web服务器种类汇集
- 使用OpenCV读取摄像头图像并显示
- PowerTool kEvP.sys=V4.2 内核拒绝服务漏洞
- 【专栏】国内外物联网平台初探(篇三:QQ物联·智能硬件开放平台)
- 联想计算机的控制面板在哪,Win10创意者的控制面板在哪?
- Java用栈实现排序_Java中的栈排序