先把代码放这,我饿饿
我吃外卖去了
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
using namespace std;
using namespace cv;
#undef UNICODE
#undef _UNICODE
//test_1用来观察不同颜色模型之间的转换
//图片来自吃不到外卖的rar
//小勾八hzy的图被我雪藏了
inline void test_1(Mat img32) {
Mat gray, HSV, YUV, Lab;
cvtColor(img32, HSV, COLOR_BGR2HSV);
cvtColor(img32, YUV, COLOR_BGR2YUV);
cvtColor(img32, Lab, COLOR_BGR2Lab);
cvtColor(img32, gray, COLOR_BGR2GRAY);
//namedWindow保证图片显示全
namedWindow("原图", WINDOW_NORMAL);
namedWindow("HSV", WINDOW_NORMAL);
namedWindow("YUV", WINDOW_NORMAL);
namedWindow("Lab", WINDOW_NORMAL);
namedWindow("gray", WINDOW_NORMAL);
imshow("原图", img32);
imshow("HSV", HSV);
imshow("YUV", YUV);
imshow("Lab", Lab);
imshow("gray", gray);
return;
}
//尝试把一张图片的三个通道分开,并且去掉其中一个来观察结果
inline void test_2(Mat img32) {
vector <Mat> imgs;
//split函数的意思是把前面那个分成三份变成后面那个
split(img32, imgs);
namedWindow("原图", WINDOW_NORMAL);
imshow("原图",img32);
namedWindow("RGB-B通道", WINDOW_NORMAL);
namedWindow("RGB-G通道", WINDOW_NORMAL);
namedWindow("RGB-R通道", WINDOW_NORMAL);
imshow("RGB-B通道", imgs[0]);
imshow("RGB-G通道", imgs[1]);
imshow("RGB-R通道", imgs[2]);
Mat result;
//result代表结果,temp保存一下原来的值
Mat temp1 = imgs[0];
Mat temp2 = imgs[1];
Mat temp3 = imgs[2];
vector<int> compression_params;
compression_params.push_back(IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);
merge(imgs, result); //合并图像
namedWindow("RGB-all", WINDOW_NORMAL);
imshow("RGB-all", result);
imwrite("rar2.png", img32, compression_params);
imgs[2] = 0;
merge(imgs, result);
namedWindow("RGB-nored", WINDOW_NORMAL);
imshow("RGB-nored", result);
return;
}
int main(){
cv::Mat img32;
img32 = imread("../rar.jpg");
//imshow("test", img32);
img32.convertTo(img32, CV_32F, 1.0 / 255);
//cvtColor用来颜色的强制转换
// test_1(img32);
test_2(img32);
waitKey(0);
return 0;
}