openCV之trackbar控件

本文介绍了如何使用OpenCV的createTrackbar函数创建trackbar控件,并详细解释了其参数意义。通过实例展示了如何利用trackbar改变图像的RGB颜色,以及如何获取控件的当前值。用户可以通过移动控件调整图像颜色,并在按下'q'键时退出程序。

createTrackbar(trackbarname , winname , value , count , callback):创建控件,有五个参数
trackbarname :控件名字
winname :所在窗口名字
value :控件当前值
count :控件最大值
callback:移动控件的回调函数,一般不需要
getTrackbarPos(trackbarname ,winname )获取控件当前值

以下代码展示利用R,G,B三个控件改变黑色背景图颜色,按‘q’退出

import cv2
import numpy as np
def callback():
    pass
#创建窗口
cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)
#创建trackbar
cv2.createTrackbar('R','trackbar',0,255,callback)
cv2.createTrackbar('G','trackbar',0,255,callback)
cv2.createTrackbar('B','trackbar',0,255,callback)
#创建一个背景图片
img = np.zeros((480,640,3),np.uint8)  #背景图分辨率为480*640,三个通道 

while True:
    #获取当前trackbar的值
    r = cv2.getTrackbarPos('R','trackbar')
    g = cv2.getTrackbarPos('G','trackbar')
    b = cv2.getTrackbarPos('B','trackbar')
    #改变背景图片颜色
    img[:] = [b,g,r] #把获取到的r,g,b的值给所有像素点
    cv2.imshow('trackbar',img)

    key = cv2.waitKey(10)
    if key & 0xff == ord('q'):
        break
### 使用TrackBar控件调整OpenCV参数 在OpenCV中,`cv::createTrackbar()` 函数可以创建滑动条来动态调整算法的参数。这使得开发者可以在运行时交互式地修改各种图像处理操作的设置。 #### 创建TrackBar控件 为了创建一个用于调节特定参数的轨道栏(即滑块),需要指定窗口名称、初始值范围以及其他回调函数等信息: ```cpp int g_nThresholdValue = 100; char* trackbarName = "Threshold Value"; // Create Trackbar cv::createTrackbar(trackbarName, windowName, &g_nThresholdValue, max_value, on_trackbar); ``` 这里定义了一个名为 `Threshold Value` 的滑杆,并将其绑定到给定窗口上[^3]。 #### 定义回调函数 每当用户移动滑块时都会触发关联的回调函数,在此函数内部可以根据当前选中的位置更新相应的变量并重新计算结果: ```cpp void on_trackbar(int, void*) { // Update threshold value based on the position of slider. } ``` 通过这种方式就可以实现实时预览不同阈值下的边缘检测效果或其他任何依赖数值变化的操作。 #### 应用实例:Canny Edge Detection 下面给出一段完整的代码片段展示如何利用上述方法实现 Canny 边缘检测器灵敏度控制功能: ```cpp #include <opencv2/opencv.hpp> using namespace cv; Mat src, gray; int lowThreshold = 0; const int max_lowThreshold = 100; const char* window_name = "Edge Map"; void CannyThreshold(int, void*) { blur(gray, detected_edges, Size(3, 3)); Canny(detected_edges, detected_edges, lowThreshold, lowThreshold * ratio, kernel_size); imshow(window_name, detected_edges); } int main() { namedWindow(window_name, WINDOW_AUTOSIZE); createTrackbar("Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold); src = imread(argv[1]); cvtColor(src, gray, COLOR_BGR2GRAY); CannyThreshold(0, 0); waitKey(); return 0; } ``` 这段程序允许使用者通过拖拽界面上的小部件来自由设定最小梯度强度从而影响最终输出轮廓线条的数量与质量。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值