一、颜色模型
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_OBJECT
public:
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()</