opencv_滑动条的使用

本文介绍了一个使用OpenCV实现的Canny边缘检测算法示例。该程序通过加载图像、创建滑动条来调整阈值的方式展示Canny算法的效果,并将处理后的图像实时显示出来。适用于图像处理、计算机视觉等领域的初学者。
#include "cv.h"  
#include "highgui.h"  
#include <stdio.h>  
IplImage* src = NULL  ;  
IplImage* dst = NULL ;  
static const char* wnd_name = "canny" ;  
static const char* file_name = "lena.jpg" ;  
static const char* trackbar_name = "threshold" ;  
void on_track( int pos )  
{  
    if( src->nChannels != 1 )  
    {  
            printf("source image is not gray/n");  
    }  
      
    if( pos == 0  )  
    {  
        cvShowImage(wnd_name,src);  
    }  
    else  
    {  
        cvCanny(src,dst,pos,pos * 3 ,3);  
        cvShowImage(wnd_name,dst);  
    }  
      








}  
int main( int argc,char** argv)  
{  
    int value = 0 ;  
    src = cvLoadImage("d:\\345.png",0 );  
    dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);  
      
    cvNamedWindow(wnd_name,CV_WINDOW_AUTOSIZE ) ;  
    cvCreateTrackbar(  
                    trackbar_name,//const char* trackbarName,  
                    wnd_name,//const char* windowName,  
                    &value,//int* value,  
                    100,//int count,  
                    on_track//CvTrackbarCallback onChange   
    );  
    on_track(0);  
      
    cvWaitKey(0);  
      
    cvDestroyAllWindows();  
    cvReleaseImage(&src);  
    cvReleaseImage(&dst);  
    return 0 ;  
}  

在C++中使用OpenCV创建和使用滑动条,可借助`createTrackbar`函数,该函数能创建可调整数值的滑动条并附加到指定窗口上,其定义如下: ```cpp int cv::createTrackbar(const String & trackbarname, // 滑动条的名称,作为字符串传递 const String & winname, // 滑动条的窗口名称,通常是显示图像的窗口名称 int * value, // 指向整数变量的指针,该指针指向的值反映滑块的位置,创建后,滑块位置由此变量定义 int count, // 滑动条的最大取值 TrackbarCallback onChange = 0, // 回调函数:每次滑块更改位置时要调用的函数的指针 void * userdata = 0 // 传递给回调函数的可选参数 ); ``` 其中回调函数的定义如下: ```cpp void onChange(int value, void* userdata) // void* userdata 参数是可选的 { // 滑动条值发生变化时执行的操作 } ``` 以下为示例代码,展示了如何使用`createTrackbar`函数创建和使用滑动条: ```cpp #include <opencv2/opencv.hpp> #include <iostream> // 全局变量 int slider_value = 50; const int slider_max = 100; cv::Mat image; // 回调函数 void onChange(int value, void* userdata) { // 这里可以根据滑动条的值进行图像处理操作 std::cout << "Slider value: " << value << std::endl; } int main() { // 读取图像 image = cv::imread("your_image.jpg"); if (image.empty()) { std::cout << "Could not open or find the image" << std::endl; return -1; } // 创建窗口 cv::namedWindow("Image Window", cv::WINDOW_NORMAL); // 创建滑动条 cv::createTrackbar("Slider", "Image Window", &slider_value, slider_max, onChange); // 显示图像 cv::imshow("Image Window", image); // 等待按键事件 cv::waitKey(0); return 0; } ``` 在上述代码中,首先定义了全局变量`slider_value`和`slider_max`,分别表示滑动条的初始值和最大值。然后定义了回调函数`onChange`,当滑动条的值发生变化时,该函数会被调用。在`main`函数中,读取图像并创建窗口,接着使用`createTrackbar`函数创建滑动条,并将其附加到指定的窗口上。最后显示图像并等待按键事件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值