[pre lang="cpp" line="1"]//一堆opencv头文件
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "cvaux.h"
int _tmain(int argc, _TCHAR* argv[])
{
//这句话意思是建立一个窗口,没窗口怎么看图呢? 必须要的第一步!
//虽然写在后面也行,但这句话在较大的程序中不写在第一行可能有BUG,原因未知~~
//括号里src是窗口名,1表示这个窗口是自动确定大小。图有多大窗口就有多大~ (CV_WINDOW_AUTOSIZE的值也就是1)
cvNamedWindow("src",1);
//建立一个图像 我现在建立了一个自定义大小的窗口400*400 深度8 通道为3(也就是RGB彩色通道,1是单通道黑白图)
IplImage *src = cvCreateImage(cvSize(400,400),8,3);
//这个教程的重点!!!!!!!!!!!!!!!!!!!滚动条。
//有很多人看着教程也了个在全局的。这里要说其实写在内部2行就成。
//cvCreateTrackbar第一个参数为 拖动条的名字, 第二个为将拖动条建立在哪个窗口, 第三个为拖动条初始化在哪个数值上(别忘加&),第四个没最大值,第五个0(对就是0)
int rect_height = 0;
cvCreateTrackbar("serial","src",&rect_height,100,0);
int target = 0;
for (;;)
{
//因为拖动条要控制图像变化,既然图像会变化就要每一帧前清空图像。否则就如你不要橡皮擦一直在画画一样,越涂越满。
cvZero(src);
//图形显示延迟 这是数据上的延迟,而不是时间上的延迟。这样写只是为了好看点。
if (target < rect_height)
{
target++;
}
else if (target > rect_height)
{
target--;
}
double target_percent = target*0.01;
//建立矩形的函数。随着拖动条变化,一个柱状图跟着变化。 最后一个参数为填满这个矩形。
cvRectangle(src,cvPoint(100,400-400*target_percent),cvPoint(300,400),CV_RGB(0,0,255),CV_FILLED);
//显示图像。将第二个参数src的图像显示在第一个名为“src”窗口中
cvShowImage("src",src);
//cvWaitKey为每次循环到这里等待1MS没反应就往下读。 如果为0不是不等待,而是一直等待在这里。将循环卡主。
char c = cvWaitKey(1);
if (c == 27)
{
break;
}
}
//下面两行就一起说了,释放图像内存和释放窗口内存。
cvReleaseImage(&src);
cvDestroyWindow("src");
return 0;
}[/code]啰嗦了半天。。 我觉得是挺清晰的。。就看你有耐心看吗。。{:soso_e121:}
|