gpt4 book ai didi

c++ - OpenCV 2.1 托管 C++ (CLI/C++) 中的 cvSetMouseCallback

转载 作者:太空狗 更新时间:2023-10-29 21:06:52 30 4
gpt4 key购买 nike

我的类名称是 HandMotionRecognition,我在鼠标回调中调用 getColorPixel 方法。这是在使用 Visual Studio 2010 的 OpenCV 中,项目类型是 c++ -> cli。

处理鼠标事件的标准代码(除非我弄错了)是

cvSetMouseCallback( "CameraIn", getColorPixel, (void*) frameHSV);

但是当我编译时它给出了一个编译时错误

error C3867: 'HandMotionRecognition::getColorPixel': function call missing argument list; use '&HandMotionRecognition::getColorPixel' to create a pointer to member

然后我按照我说的去做,把代码放成这样......

cvSetMouseCallback( "CameraIn", &HandMotionRecognition::getColorPixel, (void*) frameHSV);

但是我再次遇到编译错误..

error C3374: can't take address of 'HandMotionRecognition::getColorPixel' unless creating delegate instance

所以我创建了一个这样的委托(delegate)...[创建委托(delegate)..我不知道这是 100% 正确的]

  1. 我将 delegate void MouseCallbackDelegate( int event, int x, int y, int flags, void *param ); 放在 HandMotionRecognition.h 中

  2. 我将此代码放在 HandMotionRecognition.cpp 而不是 cvSetMouseCallback( "CameraIn", &HandMotionRecognition::getColorPixel, (void*) frameHSV);

    MouseCallbackDelegate ^StaticDelInst = gcnew MouseCallbackDelegate(this, &HandMotionRecognition::getColorPixel);

    cvSetMouseCallback( "CameraIn", StaticDelInst, (void*) frameHSV);

但它随后给出了编译错误:(这是我得到的唯一错误)

error C2664: 'cvSetMouseCallback' : cannot convert parameter 2 from 'HandMotionRecognition::MouseCallbackDelegate ^' to 'CvMouseCallback'

(至于我所看到的..这是由于使用了 cli 而不是 win32)

是否有变通办法或者我在这里做错了什么???

请帮忙...

最佳答案

如您所见,回调方法必须是静态的(或非成员函数)。这种情况下的标准用法是在 void* param 参数中传递类实例指针,并使用 static 函数来调用成员函数。由于您目前正在使用 param 来存储 frameHSV,因此您需要以其他方式传输它(例如,将其存储在您的类实例中)。

例子:

class HandMotionRecognition { 
/* your code */
private:
void getPixelColor(int event, int x, int y, int flags, void* param) {
}
public:
static void mouseCallback(int event, int x, int y, int flags, void* param) {
static_cast<HandMotionRecognition*>(param)->getPixelColor(event, x, y, flags);
}
}

并注册:

HandMotionRecognition* hmr = /* ... */
hmr->setFrameHSV(frameHSV);
cvSetMouseCallback("CameraIn", &HandMotionRecognition::mouseCallback, hmr);

关于c++ - OpenCV 2.1 托管 C++ (CLI/C++) 中的 cvSetMouseCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489457/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com