#ifdef _DEBUG
#pragma comment(lib, "C:\\OpenCV2.2\\lib\\opencv_core220d.lib")
#pragma comment(lib, "C:\\OpenCV2.2\\lib\\opencv_highgui220d.lib")
#else
#pragma comment(lib, "C:\\OpenCV2.2\\lib\\opencv_core220.lib")
#pragma comment(lib, "C:\\OpenCV2.2\\lib\\opencv_highgui220.lib")
#endif
#include "C:\\OpenCV2.2\\include\\opencv\\cxcore.h"
#include "C:\\OpenCV2.2\\include\\opencv\\cv.h"
#include "C:\\OpenCV2.2\\include\\opencv\\highgui.h"
template<class T> class Image {
private:
IplImage* imgp;
public:
Image(IplImage* img=0) {imgp=img;}
~Image(){imgp=0;}
inline T* operator[](const int rowIndx) {
return ((T *)(imgp->imageData + rowIndx*imgp->widthStep));
}
};
typedef struct{
unsigned char b,g,r;
} RgbPixel;
typedef Image<RgbPixel> RgbImage;
typedef Image<unsigned char> BwImage;
int main()
{
IplImage* img; //定义一个图像指针,后面将指向获取的图像
cvNamedWindow("win1"); //新建一个窗口用于显示图像
cvNamedWindow("win2");
CvCapture* invideo = cvCreateCameraCapture(-1); //初始化输入视频:摄像头
if (!invideo) return 0; //初始化失败则退出程序
int valueR = 100;
int valueG = 100;
int valueB = 100;//滑块值变量
cvCreateTrackbar("Red", "win2", &valueR, 200, NULL); //创建滑块
cvCreateTrackbar("Green", "win2", &valueG, 200, NULL);
cvCreateTrackbar("Blue", "win2", &valueB, 200, NULL);
while (1) //无限循环
{
img = cvQueryFrame(invideo); //获取一帧图像,并且用img指向它
cvShowImage("win1", img);
RgbImage dat(img);
//double bright = value/100.0; //将滑块值变换为参数值
//double bright = cvGetTrackbarPos("Bright", "win1")/100.0;
for (int i=0; i<img->height; i++)
for (int j=0; j<img->width; j++)
{
int tempR = dat[i][j].r;
int tempG = dat[i][j].g;
int tempB = dat[i][j].b;
if(tempR>valueR||tempG>valueG||tempB>valueB){
dat[i][j].r =100;
dat[i][j].g =0;
dat[i][j].b =0;}
else{
dat[i][j].r =0;
dat[i][j].g =100;
dat[i][j].b =0;}//修改各个通道亮度
}
cvShowImage("win2", img); //将图像显示在之前创建的窗口上
if (cvWaitKey(1)>=0) break; //等待1毫秒,如果期间按下任意键则退出循环
}
cvReleaseCapture(&invideo); //关闭输入视频
return 0;
}