一、色彩空间头文件
在项目的头文件中,右击添加,新建项
例如我的是testopencv.h
自定义一个头文件,用于图片色彩空间的转换和保存操作
定义个Colors
类
里面有一个函数声明void colorspaces(Mat& image);
,用于实现图片的色彩空间转换操作
#pragma once
#include<opencv2/opencv.hpp>
using namespace cv;
class Colors{
public:
void colorspaces(Mat& image);
};
二、色彩空间转换函数(colorspaces函数)实现
在项目的源文件中,右击添加,新建项
例如我的是colorspaces.cpp,该文件用于实现图像色彩空间转换函数(colorspaces函数)
之前自己写了一个头文件,先导入刚才的头文件,#include"testopencv.h"
然后对定义的函数声明(void colorspaces(Mat& image);
)进行实现
实现方式:类名::函数
因为图片在C++中通过矩阵(Matrix)进行存储,故定义俩矩阵gray和hsv用于存储转换色彩空间后的图片,Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
将image
这个BGR彩色图转换(to == 2)为HSV色域,用hsv接收
H ( Hue)是色调,S ( Saturation) 是饱和度,V ( Value)表示黑暗的程度(或光谱另一端的明亮程度 )
cvtColor(image, gray, COLOR_BGR2GRAY);
将image
这个BGR彩色图转换(to == 2)为GRAY灰度图,用gray接收
灰度图就不多解释了哈,单颜色通道,通过公式转的
imshow("HSV", hsv);
使用窗口名称为HSV的窗口展示一下hsv这个对象
imshow("Gray", gray);
使用窗口名称为Gray的窗口展示一下gray这个对象
imwrite("E:/C++_workspace/hsv.png", hsv);
将hsv对象保存到E:/C++_workspace/hsv.png指定位置
imwrite("E:/C++_workspace/gray.png", gray);
将gray对象保存到E:/C++_workspace/gray.png指定位置
#include"testopencv.h"
void Colors::colorspaces(Mat &image){
Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("HSV", hsv);
imshow("Gray", gray);
imwrite("E:/C++_workspace/hsv.png", hsv);
imwrite("E:/C++_workspace/gray.png", gray);
}
三、主函数调用
之前博文有讲解,这里就不在详细赘述,可参考博文:一、图像读取显示
这里就叙述下未曾出现的函数
先把自己定义的头文件导入一下,#include "testopencv.h"
Colors yy;
,对之前写的Colors这个类进行对象声明,类对象为yy
yy.colorspaces(src);
,调用这个色彩空间转换方法colorspaces,传入读取得到的src图片即可
#include <opencv2/opencv.hpp>
#include <iostream>
#include "testopencv.h"
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = cv::imread("E:/C++_workspace/beyond.jpg",IMREAD_COLOR);
if (src.empty()) {
printf("load image is false...\n");
return -1;
}
namedWindow("yanyu",WINDOW_AUTOSIZE);
imshow("yanyu", src);
Colors yy;
yy.colorspaces(src);
waitKey(0);
destroyAllWindows();
return 0;
}
项目结构如图所示
效果图展示