opencv学习日记——对娜扎小姐姐 LUT多阈值处理
简单点说就是把原图像素点像查字典一样变成我们规定的值。结论:娜扎小姐姐咋变都很美
一、图像处理结果
二、代码部分
#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
//定义数组,然后赋值
uchar lutfirst[256];
for(int i = 0; i < 256; i++)
{
if(i < 100)
lutfirst[i] = 0;
else if(i > 100 && i <=200)
lutfirst[i] = 100;
else if(i > 200)
lutfirst[i] = 255;
}
//定义一个通道的数组,后面用作阈值
Mat lutone(1, 256, CV_8UC1, lutfirst);
//同理 总共定义三个
uchar lutsecond[256];
for(int i = 0; i < 256; i++)
{
if(i < 100)
lutsecond[i] = 0;
else if(i > 100 && i <=200)
lutsecond[i] = 100;
else if(i > 200)
lutsecond[i] = 255;
}
Mat luttwo(1, 256, CV_8UC1, lutsecond);
uchar luttheird[256];
for(int i = 0; i < 256; i++)
{
if(i < 100)
luttheird[i] = 0;
else if(i > 100 && i <=200)
luttheird[i] = 100;
else if(i > 200)
luttheird[i] = 255;
}
Mat lutthree(1, 256, CV_8UC1, luttheird);
//把前面定义的三通道合成一个矩阵
vector<Mat> mergeMats;
mergeMats.push_back(lutone);
mergeMats.push_back(luttwo);
mergeMats.push_back(lutthree);
Mat luttree;
merge(mergeMats, luttree);
//读取娜扎小姐姐图像
Mat img1 = imread("nazha.jpg");
if(img1.empty())
{
cout << "读取图像错误";
return -1;
}
//图像有点大,缩小一下
Mat img;
resize(img1, img, Size(670, 471));
//LUT转换
Mat gray, out0, out1, out2;
//转化为灰度图
cvtColor(img, gray, COLOR_BGR2GRAY);
//将灰度图进行三值化(我命名的,因为设定了三个阈值映射嘛)
LUT(gray, lutone, out0);
//将原图进行单通道三值化
LUT(img, lutone, out1);
//将原图进行三通道三值化
LUT(img, lutthree, out2);
imshow("out0", out0);
imshow("out1", out1);
imshow("out2", out2);
waitKey(0);
return 0;
}