Blank_Shen 2019-12-09 10:35 采纳率: 0%
浏览 251

关于opencv回调函数形参的问题

#include<iostream>
#include<opencv2/opencv.hpp>
#include<stdlib.h>

using namespace cv;
using namespace std;

// 定义全局变量
cv::Mat img_Original;
cv::Mat img_Ranged;
cv::Mat img_Median;

// 定义回调函数

void on_low_height_thresh_trackbar(int, void*);
void on_high_height_thresh_trackbar(int, void*);

int low_height = 50, high_height = 85;

int main()
{
    img_Original = cv::imread("ROI1.jpg", 0);
    cv::medianBlur(img_Original, img_Median, 5);



    // 创建窗口
    cv::namedWindow("original image");
    cv::namedWindow("selected image");
    // 创建回调函数进度条
    cv::createTrackbar("Low height", "selected image", &low_height, 255, on_low_height_thresh_trackbar);
    cv::createTrackbar("High height", "selected image", &high_height, 255, on_high_height_thresh_trackbar);

    // 显示图像
    cv::imshow("original image", img_Original);

    on_low_height_thresh_trackbar(low_height, 0);
    on_high_height_thresh_trackbar(high_height, 0);

    cv::waitKey(0);
    return 0;
}

// 定义回调函数
void on_low_height_thresh_trackbar(int, void*)
{
    low_height = cv::min(high_height - 1, low_height);
    cv::setTrackbarPos("Low height", "selected image", low_height);
    // 选取阈值
    cv::inRange(img_Median, low_height, high_height, img_Ranged);
    // 显示图像
    cv::imshow("selected image", img_Ranged);
}

void on_high_height_thresh_trackbar(int, void*)
{
    high_height = cv::max(high_height, low_height + 1);
    cv::setTrackbarPos("High height", "selected image", high_height);
    // 选取阈值
    cv::inRange(img_Median, low_height, high_height, img_Ranged);
    // 显示图像
    cv::imshow("selected image", img_Ranged);
}

void on_low_height_thresh_trackbar(int, void*)
void on_high_height_thresh_trackbar(int, void*)
在这两个函数中int,void*这两个形参都没有出现,那么设置这两个形参是为什么呢?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-28 23:10
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在OpenCV库中,on_low_height_thresh_trackbaron_high_height_thresh_trackbar 是两个用于控制图像处理过程的回调函数。这些函数的主要作用是在图像上应用阈值分割,将图像分为高亮和非高亮部分。

    在这个示例中,on_low_height_thresh_trackbar 函数接受两个参数:一个整数 (int) 和一个 void* 类型的指针(通常用于存储其他数据)。这个指针可以用来接收从用户输入的数值或者一些状态信息。在这个例子中,我们没有使用任何指针,所以这两个参数并没有实际用处。

    同样地,on_high_height_thresh_trackbar 函数也类似,它也有一个整数参数和一个 void* 指针。然而,在这个特定的例子中,由于没有使用指针,所以这两个参数也没有起到实际的作用。

    总的来说,这两个函数的目的是在图像上应用阈值分割,并且它们的功能与它们接受的参数无关。因此,我们可以认为这两个函数中的 intvoid* 参数并不是必要的,但它们的存在可能是为了提供更多的功能或灵活性给调用者,这取决于具体的实现细节和开发环境。

    评论

报告相同问题?