一、杂碎知识点
H 0~180;S,V 0~255
imread函数将输入的图像转换为八位的;而imwrite只接收八位的图像(但是本文使用了HSV,未解决)
waitKey()括号里面的数字表示窗口显示毫秒,其中waitKey()和waitKey(0)表示无限制显示窗口
二、代码的实现
cvtColor函数:cvtColor(输入图像名,输出图像名,转换类型);
imwrite函数:imwrite("保存位置" ,输出文件名)
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat image = imread("D:/images/images/lena.png", IMREAD_ANYCOLOR);
Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("input", image);
imshow("HSV", hsv);
imshow("灰度", gray);
imwrite("D:/opencv/2/hsv1.png", hsv);
imwrite("D:/opencv/2/gray1.png", gray);
waitKey(0);
}
三、C++语法的多种表达方式(类)
1、建立一个头文件,创建一个类
创建一个类QuickDemo,此类会执行colorSpace_Demo函数,为一个读取图像的函数
#pragma once
#include <opencv2/opencv.hpp>
using namespace cv;
class QuickDemo {
public:
void colorSpace_Demo(Mat & image);
};
2、定义一个图像属于此类
在前面任意一个定义了图像的程序,将图像定义为QuickDemo,并执行函数colorSpace_Demo(src);(注意此处src已经是Mat类型)
【疑问:如果是多张图片改如何处理】
Mat src = imread("D:/images/images/lena.png",IMREAD_ANYCOLOR);
imshow("输入窗口", src);
QuickDemo qd;
qd.colorSpace_Demo(src);
3、目标操作
目标操作过程任有些不明白,为什么直接void即可,为什么没有waitKey(0)也依然可以显示窗口为无限时间(第二步与第三步逻辑不清晰,C++还未学到)
#include <quick opencv.h>
void QuickDemo::colorSpace_Demo(Mat& image) {
Mat gray, hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);//H色调 0 ~180,S饱和度,V明度 0~255
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("HSV", hsv);
imshow("灰度", gray);
imwrite("D:/opencv/2/hsv.png", hsv);
imwrite("D:/opencv/2/gray.png", gray);
}