使用OpenCV滑动条写成的简单调色器,实时输出RGB值

好久没有写博客了,最近在看OpenCV,于是动手写了个简单的RGB调色器,在终端实时输出RGB的值。通过这个程序学习滑动条的使用。程序中主要用到cvCreateTrackbar ,其用法如下:

cvCreateTrackbar

创建trackbar并将它添加到指定的窗口。

CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );

int cvCreateTrackbar( const char* trackbar_name, const char* window_name,

int* value, int count, CvTrackbarCallback on_change );

trackbar_name

被创建的trackbar名字。

window_name

窗口名字,这个窗口将为被创建trackbar的父对象。

value

整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。

count

滑块位置的最大值。最小值一直是0。

on_change

每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar显示在指定窗口的顶端。

#include "cv.h"
#include "highgui.h"
#include "iostream"
using namespace std;

IplImage *image;
int R=0,G=0,B=0;

void callback_R(int position)
{
	cout<<"("<<B<<","<<G<<","<<R<<")"<<endl;
	R=position;
	cvSet(image,cvScalar(B,G,R));
	cvShowImage("image",image);
}

void callback_G(int position)
{
	cout<<"("<<B<<","<<G<<","<<R<<")"<<endl;
	G=position;
	cvSet(image,cvScalar(B,G,R));
	cvShowImage("image",image);
}
void callback_B(int position)
{
	cout<<"("<<B<<","<<G<<","<<R<<")"<<endl;
	B=position;
	cvSet(image,cvScalar(B,G,R));
	cvShowImage("image",image);
}

int main()
{
	//IplImage *image;
	image=cvCreateImage(cvSize(300,300),IPL_DEPTH_8U,3);
	cvZero(image);
	cvNamedWindow("image");
	cvShowImage("image",image);

	cvCreateTrackbar("R","image",NULL,225,callback_R);
        cvCreateTrackbar("G","image",NULL,225,callback_G);
	cvCreateTrackbar("B","image",NULL,225,callback_B);

	while(1)
	{
		if(cvWaitKey(0)==27) break;
	}

	return 0;
}

效果:

时间: 2024-12-15 01:50:25

使用OpenCV滑动条写成的简单调色器,实时输出RGB值的相关文章

创建滑动条

函数原型: int createTrackbar(conststring& trackbarname,conststring& winname,int* value,int count,TrackbarCallback onChange=0,void* userdata = 0); #include <opencv.hpp> using namespace cv; #define WINDOW_NAME "线性混合示例" // 为窗口标题定义的宏 // --

Android开发手记(11) 滑动条SeekBar

安卓滑动条的操作特别简单,通过getProgress()可以获得SeekBar的位置,通过setProgress(int progress)可以设置SeekBar的位置.要想动态获取用户对SeekBar的操作的话,只需要设置setOnSeekBarChangeListener即可. setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() 示例代码如下: 1 import android.support.v7.app.App

opencv学习之路(5)、鼠标和滑动条操作

一.鼠标事件 1 #include<opencv2/opencv.hpp> 2 #include<iostream> 3 using namespace cv; 4 using namespace std; 5 6 Mat img(500,500,CV_8UC3,Scalar(255,255,255));//定义成全局变量 7 8 void OnMouse(int event,int x,int y,int flags,void* param){ 9 if(event==CV_EV

opencv学习之路(6)、鼠标截图,滑动条播放视频

一.鼠标截图 1 #include<opencv2/opencv.hpp> 2 #include<iostream> 3 using namespace cv; 4 using namespace std; 5 6 Mat img=imread("E://1.jpg"); 7 Mat temp=img.clone(); 8 Mat ROI; 9 Point pt; 10 bool flag=false; 11 12 void onMouse(int event,

OpenCV中通过滑动条阈值分割多通道图像

1.阈值分割 阈值分割法是一种基于区域的图像分割技术.其基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类.根据图像阈值化算法所依据的信息源,可将阈值化方法分为五类:1) 基于聚类的方法:数据聚类中,总的数据集被划分为属性相似的子类,例如将灰度级聚类成为两部分:前景物体部分和背景部分.2) 基于直方图的方法:在直方图的峰.谷和直方图的圆滑曲线上进行分析.3) 基于熵的方法:熵方法将区域分为背景区域和前景区域,前景区域通常是物体部分(在一些热红外图像中,背景部分是物体) .该方法是通过最小

python opencv:使用滑动条做调色板

cv2.getTrackbarPos() 函数的 一个参数是滑动条的名字, 第二个参数是滑动条被放置窗口的名字, 第三个参数是滑动条的默认位置. 第四个参数是滑动条的最大值, 第五个函数是回调函数,每次滑动条的滑动都会调用回调函数. 回调函数通常都会含有一个默认参数,就是滑动条的位置. 在本例中这个函数不用做任何事情,我们只需要 pass 就可以了 滑动条的另外一个重要应用就是用作转换按钮. 默认情况下 OpenCV 本身不带有按钮函数. 所以我们使用滑动条来代替. 在我们的程序中,我们要创建一

滑动条 Trackbar[OpenCV 笔记9]

OpenCV中没有实现按钮的功能,我们可以利用滑动条来实现按钮功能. int createTrackerbar(const string& trackerbarname, const string winame, int* value, int count, TrackbarCallback onChange=0, void* userdata=0); trackbarname 轨迹条的名字. winname 窗口的名字,轨迹条会依附在这个窗口上. value 一个指向整型的指针,表示滑块的位置

简单的滑动条

今天要做个滑动条 如图: 用jqueryUI实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>简单的滑动条插件</title> <link rel="stylesheet" href="js/jQueryUi/jquery-ui.min.css">

android进度条、滑动条和评分控件

所谓进度条.滑动条和评分控件,在手机应用中,相信你见过加载游戏时.更新应用时等情况,屏幕出现一条进度栏,这里称之为进度条:当你调节音量时出现的这里即称作滑动条:而评分控件,当你在淘宝给卖家评价时出现的类似5星评价,这里即称作评分控件,下面将分别详细说明这三种控件的基础使用方法. 一.ProgressBar进度条控件 1. 首先ProgressBar进度条给出了两种样式,分别是progressBarStyleLarge和progressBarStyleHorizontal,此次主要以progres