2-1創建TrackBar可調值
程式說明:
運行結果:
以下我們可以把一張圖的不同RGB channel的比例做調整,下圖把Green的Channel的比例往下調整,
可以觀察到影像就會偏紫色。
範例程式:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
/// Global Variables
const int r_slider_max = 100;
const int g_slider_max = 100;
const int b_slider_max = 100;
int r_slider=50;
int g_slider=50;
int b_slider=50;
cv::Mat img;
cv::Mat imgResize;
cv::Mat imgOut;
void on_trackbarR(int value, void*)
{
imgOut = imgOut.clone();
int tmpValue = 0;
for (int i = 0; i < imgResize.rows; i++)
{
for (int j = 0; j < imgResize.cols; j++)
{
tmpValue = (int)imgResize.at
imgOut.at
}
}
cv::imshow("ImageRGBChannel", imgOut);
}
void on_trackbarG(int value, void*)
{
imgOut = imgOut.clone();
int tmpValue = 0;
for (int i = 0; i < imgResize.rows; i++)
{
for (int j = 0; j < imgResize.cols; j++)
{
tmpValue = (int)imgResize.at
imgOut.at
}
}
cv::imshow("ImageRGBChannel", imgOut);
}
void on_trackbarB(int value, void*)
{
imgOut = imgOut.clone();
int tmpValue = 0;
for (int i = 0; i < imgResize.rows; i++)
{
for (int j = 0; j < imgResize.cols; j++)
{
tmpValue = (int)imgResize.at
imgOut.at
}
}
cv::imshow("ImageRGBChannel", imgOut);
}
int main(int argc, char** argv)
{
/// Read image ( same size, same type )
img = cv::imread("Image.jpg");
if (!img.data) {
std::cout << "無法讀到檔案" << std::endl;
return -1;
}
//將影像縮小四倍
int width = img.cols;
int height = img.rows;
cv::resize(img, imgResize, cv::Size(width / 4, height / 4));
imgOut = imgResize.clone();
/// Initialize values
r_slider = 0;
g_slider = 0;
b_slider = 0;
/// Create Windows
cv::namedWindow("ImageRGBChannel", 1);
/// Create Trackbars
char* RTrackbarName = "RChannel";
char* GTrackbarName = "GChannel";
char* BTrackbarName = "BChannel";
cv::createTrackbar(RTrackbarName, "ImageRGBChannel", &r_slider, r_slider_max, on_trackbarR);
cv::createTrackbar(GTrackbarName, "ImageRGBChannel", &g_slider, g_slider_max, on_trackbarG);
cv::createTrackbar(BTrackbarName, "ImageRGBChannel", &b_slider, b_slider_max, on_trackbarB);
/// Show some stuff
on_trackbarR(r_slider, 0);
on_trackbarG(g_slider, 0);
on_trackbarB(b_slider, 0);
/// Wait until user press some key
cv::waitKey(0);
return 0;
}