极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8829|回复: 6

【给初学者】这里好冷清。。Trackbar 拖动条~

[复制链接]
发表于 2012-7-14 11:57:13 | 显示全部楼层 |阅读模式
[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:}
回复

使用道具 举报

 楼主| 发表于 2012-7-14 12:00:21 | 显示全部楼层

纯代码图~ 看的舒服点~

[pre lang="c" line="1"]
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "cvaux.h"

int _tmain(int argc, _TCHAR* argv[])
{
        cvNamedWindow("src",1);
        IplImage *src = cvCreateImage(cvSize(400,400),8,3);
        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);
                cvShowImage("src",src);
                char c = cvWaitKey(1);
                if (c == 27)
                {
                        break;
                }
        }
        cvReleaseImage(&src);
        cvDestroyWindow("src");
        return 0;
}

[/code]
回复 支持 反对

使用道具 举报

发表于 2012-7-14 13:56:51 | 显示全部楼层
这个版块是很冷清,所以需要您注入新的血液!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-14 14:18:46 | 显示全部楼层
Randy 发表于 2012-7-14 13:56
这个版块是很冷清,所以需要您注入新的血液!!

我也是只会基本常用的东西~
我来做下推广吧~
回复 支持 反对

使用道具 举报

发表于 2012-7-14 23:56:18 | 显示全部楼层
麽麽茶㊣ 发表于 2012-7-14 14:18
我也是只会基本常用的东西~
我来做下推广吧~

欢迎啊!!
回复 支持 反对

使用道具 举报

发表于 2012-7-16 15:49:17 | 显示全部楼层
T T拖动条我也写了。。但是没人看

重拾opencv中
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-17 07:33:28 | 显示全部楼层
三水 发表于 2012-7-16 15:49
T T拖动条我也写了。。但是没人看

重拾opencv中

1380个人看过呀~
你写的都太深了,把已经定义好的函数自己又写了遍~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-9-27 12:01 , Processed in 0.046069 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表