opencv 滑动条

滑动条改变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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值