创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

2024-05-14

正如标题所示,我在基于类的 C++ 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦。请允许我解释一下。我定义了一个名为 BriskMatching 的类,在其中创建了一个名为 mouseCallback 的成员函数,其中包含 OpenCV 所需的正确参数(请参阅下面的代码片段)。

**Briskmatching.h**

class BriskMatching
{
public:
    BriskMatching();
    ~BriskMatching();

public:
    void mouseCallback(int event, int x, int y, int flags, void *param);
};

这一切都很好,但是当我尝试通过 OpenCV 将此函数设置为指定的鼠标回调函数时,我的问题出现了cv::setMouseCallback功能。

在我的主函数中,我创建了一个名为 briskMatcher 的 BriskMatching 类的实例,然后当需要设置鼠标回调时,我尝试这样做......

cv::setMouseCallback("Matches", BriskMatching::mouseCallback, &matchesImg);

不幸的是,这会引发错误。

Error   3   error C3867: 'BriskMatching::mouseCallback': function call missing argument list; use '&BriskMatching::mouseCallback' to create a pointer to member c:\users\mobilef\documents\visual studio 2010\projects\opencv_objtracking\opencv_briskmatching\main.cpp 54  1   OpenCV_BriskMatching

我可以通过将 mouseCallback 函数声明为来消除此错误static in BriskMatching.h但是由于我在 mouseCallback 函数中引用了许多非静态成员变量,所以我得到了一大堆其他错误。

所以我向你们提出的问题是这样的。我应该如何修改我的代码才能正确地将 BriskMatching 类中声明的鼠标回调函数传递给cv::setMouseCallback功能?

感谢您提前提供的所有帮助!


由于成员函数需要一个this指针,您将需要一个静态包装函数。通常,您使用param参数是成员函数所属对象的地址,因此最终会得到如下结果:

...
static void mouseCallback(int event, int x, int y, int flags, void *param);

void doMouseCallback(int event, int x, int y, int flags);

然后在里面mouseCallback:

void BriskMatching::mouseCallback(int event, int x, int y, int flags, void *param)
{
    BriskMatching *self = static_cast<BriskMatching*>(param);
    self->doMouseCallback(event, x, y, flags);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题 的相关文章

随机推荐

  • 使用 Django LocalFlavor Zip 作为模型字段

    实施以下内容的最佳方法是什么 models py gt gt gt from django db import models gt gt gt from django contrib auth models import User Crea
  • 尽管没有错误,但无法在 Eclipse 中运行 Android 项目

    当我尝试运行我的 Android 项目 昨天运行良好 时 我收到 您的项目包含错误 请在运行应用程序之前修复它们 对话框 但我的项目没有错误 我以前遇到过这个问题 解决方案总是清理项目 但这次没有帮助 红色 X 图标从工作区的项目中消失 然
  • 为什么我的 C# Paint 方法内存不足?

    我是 C 新手 尝试通过编写一些简单的应用程序来熟悉语法和 NET 库 我最近进行的一个迷你项目是极地时钟就像这里发现的一样 https mbostock github io protovis ex clock html 我早期注意到的问题
  • Twitter Streaming API 使用的官方编码?是UTF-8吗?

    Twitter 流 API 的官方编码是什么 根据我所看到的 我最好的猜测是 UTF 8 但我想避免做出假设 我见过的 Twitter 网站上唯一暗示他们使用什么作为官方编码的部分是在这里 Twitter 不想因为我们使用 UTF 8 或相
  • 在后台每 X 分钟执行一次函数不起作用

    我使用此代码每 X 分钟执行一次函数 void executeEveryOneMinute self myFunction dispatch after dispatch time DISPATCH TIME NOW int64 t 60
  • 获取测试用例中的 BOOST TEST 测试套件名称

    我在用着BOOST TEST我想知道是否有办法找出test suite从里面test case 我知道我能找到test case的名字由 boost unit test framework current test case p name
  • Hibernate 序列乘以 50 生成“@Id”?

    private static final String SEQUENCE my seq Id GeneratedValue strategy GenerationType SEQUENCE generator SEQUENCE Sequen
  • 限制 terraform 嵌套资源中的 AWS 安全组设置

    我有一个aws directory service directory服务中定义的资源 这会创建一个安全组 https registry terraform io providers hashicorp aws latest docs re
  • 从 AVAudioRecorder 获取分贝

    我正在尝试从 AVAudio 录音机获取分贝值 这是我目前的代码 我有一个启动录音机的方法 然后是一个读取分贝值的方法 var recorder AVAudioRecorder 全局定义的记录器 然后在此处使用 func init reco
  • 从本地缓存恢复SVN密码

    有没有办法从本地缓存恢复密码 密码必须存储在某处 因为我可以运行 svn co http my svn server foo 但我自己丢失了密码 我是否必须重置它 或者是否可以 以及如何 找到并解密密码 我主要在 Windows 上使用 C
  • 如何在 iframe 加载时向页面添加加载指示器?

    我当前正在创建一个页面 单击链接后 iframe 将插入到 div 中并加载其内容 我使用以下 jQuery 调用来执行此操作 mydiv html 有时会加载源内容very慢慢地 结果看起来什么也没有发生 我希望在 iframe 内容加载
  • MS图表烛台如何设置尾部颜色

    我目前正在使用 Visual C 中的 mschart 开发烛台图 我现在创建了两个图表 创建的图表如下 问题 1 查看顶部的蜡烛图 我想将每根杆的尾部颜色应用为红色或蓝色 问题 2 查看底部的条形图 我想对此图表应用红色或蓝色 我想将相同
  • Python:不同的对象获得相同的id

    查看以下 IPython Python 3 7 会话 In 1 id hello Out 1 140300950123104 In 2 id hello Out 2 140300963300384 In 3 hello is hello O
  • 显示消息框的命令字段

    我有一个像这样的命令字段
  • JavaScript 中的 jstl

    可以在javascript中使用jstl吗 我正在绑定设置
  • Instagram 从 PHP 代码中获取访问令牌

    以下 php 代码不适用于我获取访问令牌 在客户端 ID 和密钥中 我已替换为我的真实客户端 ID 和密钥
  • 是否有设置可以停止在数据表中显示“表中没有可用数据”?

    最初我的表没有数据 我得到 表中没有可用数据 这是预期的功能 我不想创建任何文本或行 因为我将根据用户操作通过 Ajax 填充表 是否有设置可以停止表中该行的显示 我好像找不到一个此代码有效 但第一行显示 表中没有可用数据 这是 jQuer
  • 什么是“制定目标”?

    为什么我需要制作一个make target在能够构建我的源代码之前 更具体地说 什么是制定目标 http publib boulder ibm com infocenter rsdvhelp v6r0m1 index jsp topic o
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • 创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

    正如标题所示 我在基于类的 C 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦 请允许我解释一下 我定义了一个名为 BriskMatching 的类 在其中创建了一个名为 mouseCallback 的成员函