OpenCV如何为我们的应用程序添加跟踪栏(71)

2024-05-06 08:44
文章标签 opencv 应用程序 跟踪 71

本文主要是介绍OpenCV如何为我们的应用程序添加跟踪栏(71),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 返回:OpenCV系列文章目录(持续更新中......)
上一篇:OpenCV的周期性噪声去除滤波器(70)
下一篇 :OpenCV如何使用 GDAL 读取地理空间栅格文件(72)

  • 在前面的教程中(关于使用 OpenCV 添加(混合)两个图像和更改图像的对比度和亮度!),您可能已经注意到我们需要为我们的程序提供一些输入,例如\alpha\beta。我们通过使用终端输入此数据来实现这一点。
  • 好吧,是时候使用一些花哨的 GUI 工具了。OpenCV 为您提供了一些 GUI 实用程序(highgui 模块)。这方面的一个例子是 Trackbar

  • 在本教程中,我们将修改之前的两个程序,以便它们从跟踪栏获取输入信息。

目标

在本教程中,您将学习如何:

  • 在前面的教程中(关于使用 OpenCV 添加(混合)两个图像和更改图像的对比度和亮度!),您可能已经注意到我们需要为我们的程序提供一些输入,例如 \alpha\beta。我们通过使用终端输入此数据来实现这一点。
  • 好吧,是时候使用一些花哨的 GUI 工具了。OpenCV 为您提供了一些 GUI 实用程序(highgui 模块)。这方面的一个例子是 Trackbar
  • 在本教程中,我们将修改之前的两个程序,以便它们从跟踪栏获取输入信息。
  • 使用 cv::createTrackbar 在 OpenCV 窗口中添加 Trackbar

在OpenCV中,cv::createTrackbar是一个用于创建滑动条的函数,可以用于在图像处理过程中动态地调整参数。主要用途是在图形用户界面(GUI)中创建滑块,方便用户进行互动式的图像处理。

cv::createTrackbar函数的参数包括了:

- 滑动条名称:用于描述该滑动条的基本功能。
- 窗口名称:用于定义滑动条所属的窗口名称。
- 触发函数指针:是一个函数指针,表示滑动条改变时需要调用的回调函数。
- 最大值:滑动条的最大取值。
- 回调函数中的userData参数:一个指针,传递给回调函数的参数。

该函数在所指定的窗口中创建了一个指定的名称和取值范围的滑动条。当滑块被拖动时,回调函数被调用并传递滑块的值和已传递的回调中的userData参数。

C++代码

让我们修改教程中使用 OpenCV 添加(混合)两个图像中制作的程序。我们将让用户使用 Trackbar 输入\alpha值。

本教程代码如下所示。您也可以从这里下载

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>using namespace cv;
using std::cout;const int alpha_slider_max = 100;
int alpha_slider;
double alpha;
double beta;Mat src1;
Mat src2;
Mat dst;static void on_trackbar( int, void* )
{alpha = (double) alpha_slider/alpha_slider_max ;beta = ( 1.0 - alpha );addWeighted( src1, alpha, src2, beta, 0.0, dst);imshow( "Linear Blend", dst );
}int main( void )
{src1 = imread( samples::findFile("LinuxLogo.jpg") );src2 = imread( samples::findFile("WindowsLogo.jpg") );if( src1.empty() ) { cout << "Error loading src1 \n"; return -1; }if( src2.empty() ) { cout << "Error loading src2 \n"; return -1; }alpha_slider = 0;namedWindow("Linear Blend", WINDOW_AUTOSIZE); // Create Windowchar TrackbarName[50];snprintf( TrackbarName, sizeof(TrackbarName), "Alpha x %d", alpha_slider_max );createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );on_trackbar( alpha_slider, 0 );waitKey(0);return 0;
}

解释

我们只分析与 Trackbar 相关的代码:

  • 首先,我们加载两个图像,它们将被混合。
 src1 = imread( samples::findFile("LinuxLogo.jpg") );src2 = imread( samples::findFile("WindowsLogo.jpg") );
  • 要创建跟踪栏,首先我们必须创建要位于其中的窗口。所以:
 namedWindow("Linear Blend", WINDOW_AUTOSIZE); // Create Window
  • 现在我们可以创建跟踪栏:
 char TrackbarName[50];snprintf( TrackbarName, sizeof(TrackbarName), "Alpha x %d", alpha_slider_max );createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );

请注意以下内容(C++ 代码):

  • 我们的 Trackbar 有一个标签 TrackbarName
  • 跟踪栏位于名为“线性混合”(Linear Blend) 的窗口中
  • Trackbar 值将在 \(0\) 到 跟踪栏值将在 的范围内(最小限制始终为零)。
  • Trackbar 的数值存储在 alpha_slider
  • 每当用户移动 Trackbar 时,都会调用回调函数on_trackbar

最后,我们必须使用 Java 中的匿名内部类侦听器为 C++ 和 Python 代码定义回调函数on_trackbar

static void on_trackbar( int, void* )
{alpha = (double) alpha_slider/alpha_slider_max ;beta = ( 1.0 - alpha );addWeighted( src1, alpha, src2, beta, 0.0, dst);imshow( "Linear Blend", dst );
}

请注意(C++ 代码):

  • 我们使用 alpha_slider(整数)的值来获得 alpha 的双精度值。
  • 每次用户置换跟踪栏时,alpha_slider都会更新。
  • 我们将 src1src2distalphaalpha_slider 和 beta 定义为全局变量,因此它们可以在任何地方使用。

结果

  • 我们的程序产生以下输出:

  • 作为一种练习方式,您还可以为更改图像的对比度和亮度!中的程序添加两个跟踪栏。一个跟踪栏用于设置\alpha,另一个用于设置\beta。输出可能如下所示:

参考文献:

1《Adding a Trackbar to our applications!》------Ana Huamán

这篇关于OpenCV如何为我们的应用程序添加跟踪栏(71)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963918

相关文章

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

Verybot之OpenCV应用三:色标跟踪

下面的这个应用主要完成的是Verybot跟踪色标的功能,识别部分还是居于OpenCV编写,色标跟踪一般需要将图像的颜色模式进行转换,将RGB转换为HSV,因为对HSV格式下的图像进行识别时受光线的影响比较小,但是也有采用RGB模式来进行识别的情况,这种情况一般光线条件比较固定,背景跟识别物在颜色上很容易区分出来。         下面这个程序的流程大致是这样的:

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采