使用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;
}
效果:



原文地址:https://www.cnblogs.com/liguangsunls/p/6874356.html