滑动条改变HSV等(似乎有些地方不对……?)
写得超级繁琐。
#include<opencv2/core/core.hpp>
#include<iostream>
#include<opencv2\opencv.hpp>
#include"opencv2\highgui\highgui.hpp"
#include<vector>
using namespace std;
using namespace cv;
Mat dstImage;
Mat srcImage;
int g_RedValue;
int g_BlueValue;
int g_GreenValue;
static void on_R(int, void*);
static void on_G(int, void*);
static void on_B(int, void*);
int g_VValue;
int g_HValue;
int g_SValue;
static void on_H(int, void*);
static void on_S(int, void*);
static void on_V(int, void*);
int g_gValue;
static void on_Gray(int, void*);
vector<Mat> channels;
static void on_Gray2(int, void*);
int main()
{
srcImage=imread("tbbt.jpg");
if (!srcImage.data)
{
cout << "请确定目录下是否有图片!" << endl;
return 0;
}
dstImage = srcImage.clone();
g_BlueValue = 80;
g_RedValue = 80;
g_GreenValue = 80;
namedWindow("RGB效果图窗口", 1);
createTrackbar("蓝色B", "RGB效果图窗口", &g_BlueValue, 255, on_B);
createTrackbar("红色R", "RGB效果图窗口", &g_RedValue, 255, on_R);
createTrackbar("绿色G", "RGB效果图窗口", &g_GreenValue, 255, on_G);
on_B(g_BlueValue, 0);
on_R(g_RedValue, 0);
on_G(g_GreenValue, 0);
waitKey(0);
srcImage = imread("tbbt.jpg");
//目录下必须有这个图片
cvtColor(srcImage, dstImage, COLOR_RGB2HSV);
g_HValue = 80;
g_SValue = 80;
g_VValue = 80;
namedWindow("HSV效果图窗口", 1);
createTrackbar("色相H", "HSV效果图窗口", &g_HValue, 255, on_H);
createTrackbar("饱和度S", "HSV效果图窗口", &g_SValue, 255, on_S);
createTrackbar("色调V", "HSV效果图窗口", &g_VValue, 255, on_V);
on_H(g_HValue, 0);
on_S(g_SValue, 0);
on_V(g_VValue, 0);
//cvtColor(dstImage, dstImage, COLOR_HSV2BGR);
waitKey(0);
srcImage = imread("tbbt.jpg");
cvtColor(srcImage, dstImage, COLOR_RGB2GRAY);
g_gValue = 80;
namedWindow("GRAY效果图窗口");
createTrackbar("灰度G","GRAY效果图窗口",&g_gValue,255,on_Gray);
on_Gray(g_gValue, 0);
waitKey(0);
srcImage = imread("tbbt.jpg");
cvtColor(srcImage, dstImage, COLOR_RGB2GRAY);
g_gValue = 80;
namedWindow("GRAY效果图窗口2");
createTrackbar("灰度G", "GRAY效果图窗口2", &g_gValue, 255, on_Gray2);
on_Gray2(g_gValue, 0);
waitKey(0);
}
static void on_R(int, void*)
{
Mat CopyImage = srcImage.clone();
namedWindow("原始图窗口", 1);
for (int y = 0; y < srcImage.rows; y++)
{
for (int x = 0; x < srcImage.cols; x++)
{
CopyImage.at<Vec3b>(y, x)[2] =
saturate_cast<uchar>(g_RedValue+ (CopyImage.at<Vec3b>(y, x)[2]));
//CopyImage=CopyImage+Scalar(g_nBrightValue,,)
}
}
imshow("原始图窗口", srcImage);
imshow("RGB效果图窗口", CopyImage);
}
static void on_G(int, void*)
{
Mat CopyImage = srcImage.clone();
namedWindow("原始图窗口", 1);
for (int y = 0; y < srcImage.rows; y++)
{
for (int x = 0; x < srcImage.cols; x++)
{
CopyImage.at<Vec3b>(y, x)[1] =
saturate_cast<uchar>(g_GreenValue+ (CopyImage.at<Vec3b>(y, x)[1]));
//CopyImage = CopyImage + Scalar(g_nBrightValue, , )
}
}
imshow("原始图窗口", srcImage);
imshow("RGB效果图窗口", CopyImage);
}
static void on_B(int, void*)
{
Mat CopyImage = srcImage.clone();
namedWindow("原始图窗口", 1);
for (int y = 0; y < srcImage.rows; y++)
{
for (int x = 0; x < srcImage.cols; x++)
{
CopyImage.at<Vec3b>(y, x)[0] =
saturate_cast<uchar>(g_BlueValue+ (CopyImage.at<Vec3b>(y, x)[0]));
//CopyImage = CopyImage + Scalar(g_B, , )
}
}
imshow("原始图窗口", srcImage);
imshow("RGB效果图窗口", CopyImage);
}
static void on_H(int, void*)
{
Mat CopyImage = dstImage.clone();
namedWindow("原始图窗口", 1);
for (int y = 0; y < srcImage.rows; y++)
{
for (int x = 0; x < srcImage.cols; x++)
{
CopyImage.at<Vec3b>(y, x)[0] =
saturate_cast<uchar>(g_HValue + (CopyImage.at<Vec3b>(y, x)[0]));
//CopyImage=CopyImage+Scalar(g_nBrightValue,,)
}
}
imshow("原始图窗口", srcImage);
imshow("HSV效果图窗口", CopyImage);
}
static void on_S(int, void*)
{
Mat CopyImage = dstImage.clone();
namedWindow("原始图窗口", 1);
for (int y = 0; y < srcImage.rows; y++)
{
for (int x = 0; x < srcImage.cols; x++)
{
CopyImage.at<Vec3b>(y, x)[1] =
saturate_cast<uchar>(g_SValue + (CopyImage.at<Vec3b>(y, x)[1]));
//CopyImage=CopyImage+Scalar(g_nBrightValue,,)
}
}
imshow("原始图窗口", srcImage);
imshow("HSV效果图窗口", CopyImage);
}
static void on_V(int, void*)
{
Mat CopyImage = dstImage.clone();
namedWindow("原始图窗口", 1);
for (int y = 0; y < srcImage.rows; y++)
{
for (int x = 0; x < srcImage.cols; x++)
{
CopyImage.at<Vec3b>(y, x)[2] =
saturate_cast<uchar>(g_VValue + (CopyImage.at<Vec3b>(y, x)[2]));
//CopyImage=CopyImage+Scalar(g_nBrightValue,,)
}
}
imshow("原始图窗口", srcImage);
imshow("HSV效果图窗口", CopyImage);
}
static void on_Gray(int, void*)
{
Mat CopyImage=dstImage.clone();
for (int y = 0; y < srcImage.rows; y++)
{
for (int x = 0; x < srcImage.cols; x++)
{
CopyImage.at<uchar>(y,x) =
saturate_cast<uchar>(g_gValue + (CopyImage.at<uchar>(y,x)));
}
}
imshow("原始图窗口",srcImage);
imshow("GRAY效果图窗口", CopyImage);
}
static void on_Gray2(int, void*)
{
split(srcImage, channels);
Mat gray = channels.at(0) + g_gValue;
channels.clear();
channels.push_back(gray);
merge(channels, dstImage);
imshow("GRAY效果图窗口2", dstImage);
}