gpt4 book ai didi

c++ - 如何使用 cv::setMouseCallback

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:57 25 4
gpt4 key购买 nike

我正在尝试在我的 C++ 项目中使用 cv::setMouseCallback。我只是不明白。让我有一个类 Stuff 如何告诉这个类你有一个框架并在这个框架上运行 cv::setMouseCallback 这是我正在尝试做的示例:

 class Stuff{
public:
Stuff();
void setFrame(cv::Mat);
void mouse (int,int, int, int,void*);
private :
cv::Mat frame;
int key;
};

Stuff::Stuff(){}

void Stuff::setFrame(cv::Mat framex){
frame = framex;
}


int main (){
Stuff obj;

cv::Mat frame = cv::imread ("examople.jpg");
char* name;
cv::imshow(name,frame);
cv::setMouseCallback(name,obj.mouse,&frame) // I' stop here because that's exactlly what just don't work
}

这是得到的错误信息:

   Stuff::mouse : function call missing argument list; use '&Stuff::mouse ' to create a pointer to member 

真正的程序太大了,不能把它的代码放在这里,这就是我试图简化问题的原因

最佳答案

您必须在您的类中将鼠标处理程序声明为静态的。例如,我有一个 dragger 和一个成员 mouser,我想调用它。我声明了一个助手 static void mouser,它转换接收到的 void* 并调用成员:

class dragger {

void mouser(int event, int x, int y) {
current_img = original_img.clone();
Point P(x, y);
...
}
static void mouser(int event, int x, int y, int, void* this_) {
static_cast<dragger*>(this_)->mouser(event, x, y);
}

并以这种方式在 dragger 构造函数中实例化

dragger(string w, Mat m) :
window_id(w), status(0), original_img(m), /*black(0, 0, 0),*/ K(5, 5)
{
...
setMouseCallback(w, mouser, this);
}

...
}

关于c++ - 如何使用 cv::setMouseCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280220/

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