createTrackbar使用方法及步骤

createTrackbarOpencv中的API,其可在显示图像的窗口中快速创建一个滑动控件,用于手动调节阈值,具有非常直观的效果。具体定义如下:

CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,
                              int* value, int count,
                              TrackbarCallback onChange = 0,
                              void* userdata = 0);

形式参数一、trackbarname:滑动空间的名称;

形式参数二、winname滑动空间用于依附的图像窗口的名称;

形式参数三、value初始化阈值;

形式参数四、count滑动控件的刻度范围;

形式参数五、TrackbarCallback是回调函数,其定义如下:

typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);

其使用示例代码如下:

IplImage *src = NULL, *thresDst = NULL;
int threshold_min = 100;;
int max_lowThreshold = 255;

cvNamedWindow("threshold", CV_WINDOW_AUTOSIZE);
	
thresDst = cvCloneImage(src);
createTrackbar("min Threshold", "threshold", &threshold_min, max_lowThreshold,
		threshold);
threshold(0,0);

可以看出,createTrackbar的第二个参数,必须和cvNameWindow的第一个参数完全一致。其中回调函数定义及实现如下:

void threshold(int, void*)
{
	cvThreshold(src , thresDst , threshold_min , 255 , CV_THRESH_BINARY ) ;
	cvShowImage("threshold", thresDst);
}

如此,即可在图像窗口上方成功创建一个滑动控件,其效果如下(左边是原图像,右边是带有滑动控件的二值图像):

                                                    

  • 20
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
好的,如果不使用前端技术,可以使用OpenCV中的`createTrackbar`函数来创建RGB三个进度条,并实时更新图片的颜色和直方图的显示。 具体实现步骤如下: 1.引入OpenCV库 在代码中需要引入OpenCV库,以便使用其中的函数、类和方法。可以在代码中添加以下代码: ```c++ #include <opencv2/opencv.hpp> using namespace cv; ``` 2.创建窗口和进度条 ```c++ Mat image(300, 300, CV_8UC3, Scalar(0, 0, 0)); namedWindow("RGB", WINDOW_AUTOSIZE); int redValue = 0, greenValue = 0, blueValue = 0; createTrackbar("Red", "RGB", &redValue, 255); createTrackbar("Green", "RGB", &greenValue, 255); createTrackbar("Blue", "RGB", &blueValue, 255); ``` 上述代码中,我们首先创建了一个大小为300x300、颜色为黑色的图片。然后使用`namedWindow`函数创建了一个名为“RGB”的窗口,该窗口自适应图片大小。接着使用`createTrackbar`函数为窗口添加了三个进度条,分别对应红色、绿色和蓝色的值,并将它们的初始值设为0。 3.实时更新图片和直方图 ```c++ while(true) { Mat histogram(100, 300, CV_8UC3, Scalar(0, 0, 0)); int redCount[256] = {0}, greenCount[256] = {0}, blueCount[256] = {0}; for(int i=0; i<image.rows; i++) { for(int j=0; j<image.cols; j++) { Vec3b pixel = image.at<Vec3b>(i, j); redCount[pixel[2]]++; greenCount[pixel[1]]++; blueCount[pixel[0]]++; } } for(int i=0; i<256; i++) { line(histogram, Point(i, 100), Point(i, 100 - redCount[i]), Scalar(0, 0, 255)); line(histogram, Point(i+256, 100), Point(i+256, 100 - greenCount[i]), Scalar(0, 255, 0)); line(histogram, Point(i+512, 100), Point(i+512, 100 - blueCount[i]), Scalar(255, 0, 0)); } imshow("Histogram", histogram); imshow("RGB", image); int key = waitKey(10); if(key == 27) { break; } image.setTo(Scalar(blueValue, greenValue, redValue)); } ``` 上述代码中,我们使用一个`while`循环来实现实时更新图片和直方图。在循环内部,首先创建了一个大小为100x300、颜色为黑色的直方图,并统计了图片中各个颜色通道的像素值。然后使用`line`函数在直方图中绘制了红色、绿色和蓝色三个通道的直方图。最后使用`imshow`函数分别显示了图片和直方图,并使用`waitKey`函数等待用户输入。如果用户按下了`Esc`键,则退出循环,否则更新图片的颜色,并继续循环。 4.运行程序 将上述代码保存为`.cpp`文件,并使用以下命令编译: ```sh g++ -o rgb rgb.cpp `pkg-config opencv4 --cflags --libs` ``` 其中,`rgb`为可执行文件名,`rgb.cpp`为代码文件名。编译成功后,运行可执行文件,即可看到RGB三个进度条和实时更新的图片和直方图。 希望这个问题的解答能够满足您的需求。如果您还有其他问题,欢迎随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值