版权声明:本文为博主原创文章,欢迎转载,转载时请以超链接形式标明文章原始出处。 https://blog.csdn.net/lilongsy/article/details/84134038
Trackbar可以很方便的控制图像的亮度(brightness
)、对比度(contrast
)、颜色校正(colorcorrection
)和变换(transformations
)等。可以用createTrackbar
函数来创建轨迹条。
#include "pch.h"
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
//-----------------------------------【命名空间声明部分】---------------------------------------
// 描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
using namespace std;
//-----------------------------------【全局函数声明部分】--------------------------------------
// 描述:全局函数声明
//-----------------------------------------------------------------------------------------------
Mat img;
int threshval = 160; //轨迹条滑块对应的值,给初值160
//-----------------------------【on_trackbar( )函数】------------------------------------
// 描述:轨迹条的回调函数
//-----------------------------------------------------------------------------------------------
static void on_trackbar(int, void*)
{
Mat bw = threshval < 128 ? (img < threshval) : (img > threshval);
//定义点和向量
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
//查找轮廓
findContours(bw, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
//初始化dst
Mat dst = Mat::zeros(img.size(), CV_8UC3);
//开始处理
if (!contours.empty() && !hierarchy.empty())
{
//遍历所有顶层轮廓,随机生成颜色值绘制给各连接组成部分
int idx = 0;
for (; idx >= 0; idx = hierarchy[idx][0])
{
Scalar color((rand() & 255), (rand() & 255), (rand() & 255));
//绘制填充轮廓
drawContours(dst, contours, idx, color, CV_FILLED, 8, hierarchy);
}
}
//显示窗口
imshow("Connected Components", dst);
}
//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main()
{
system("color 5F");
//载入图片
img = imread("jinan.jpg", 0);
if (!img.data) { printf("Oh,no,读取img图片文件错误~! \n"); return -1; }
//显示原图
namedWindow("Image", 1);
imshow("Image", img);
//创建处理窗口
namedWindow("Connected Components", 1);
//创建轨迹条
createTrackbar("Threshold", "Connected Components", &threshval, 255, on_trackbar);
on_trackbar(threshval, 0);//轨迹条回调函数
waitKey(0);
return 0;
}
参考说明:
createTrackbar