好久没有写博客了,近期在看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 Fooint); 假设没有回调函数,这个值能够设为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_Rint position) { cout<<""<<B<<","<<G<<","<<R<<")"<<endl; R=position; cvSetimage,cvScalarB,G,R)); cvShowImage"image",image); } void callback_Gint position) { cout<<""<<B<<","<<G<<","<<R<<")"<<endl; G=position; cvSetimage,cvScalarB,G,R)); cvShowImage"image",image); } void callback_Bint position) { cout<<""<<B<<","<<G<<","<<R<<")"<<endl; B=position; cvSetimage,cvScalarB,G,R)); cvShowImage"image",image); } int main) { //IplImage *image; image=cvCreateImagecvSize300,300),IPL_DEPTH_8U,3); cvZeroimage); 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); while1) { ifcvWaitKey0)==27) break; } return 0; }
效果: