my_mouse_callback”: 函数调用缺少参数列表

本文讨论了在使用OpenCV进行鼠标点击事件编程时遇到的编译错误问题,并提供了解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我在学习OpenCV时,有一节介绍鼠标点击事件,我试着编译书上面的代码,但是会出现错误。代码如下:

void CMyVideoDlg::draw_rect(IplImage* img,CvRect rect)
{
cvRectangle(img,cvPoint(rect.x,rect.y),cvPoint(rect.x + rect.width,rect.y + rect.height),cvScalar(0xff,0x00,0x00));
}
void CMyVideoDlg::my_mouse_callback(int event,int x,int y,int flags,void* param)
{
IplImage* image = (IplImage*)param;


switch (event)
{
case CV_EVENT_MOUSEMOVE:
{
if (drawing_rect)
{
rect.width = x - rect.x;
rect.height = y - rect.y;
}
}
break;
case CV_EVENT_LBUTTONDOWN:
{
drawing_rect = true;
rect = cvRect(x,y,0,0);
}
break;
case CV_EVENT_LBUTTONUP:
{
drawing_rect = false;
if (rect.width < 0)
{
rect.x += rect.width;
rect.width *= -1;
}
if (rect.height < 0)
{
rect.y += rect.height;
rect.height *= -1;
}
draw_rect(image,rect);
}
break;
}
}


void CMyVideoDlg::OnBnClickedBtndrawrect()
{
// TODO: 在此添加控件通知处理程序代码
rect = cvRect(-1,-1,0,0);


IplImage* image = cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);
cvZero(image);


IplImage* temp = cvCloneImage(image);


cvNamedWindow("Rectangle Example");


cvSetMouseCallback("Rectangle Example", my_mouse_callback,(void*)image);


while(1)
{
cvCopyImage(image,temp);
if (drawing_rect)
{
draw_rect(temp,rect);
}


cvShowImage("Rectangle Example",temp);


if (cvWaitKey(33) == 27)
{
break;
}
}


cvReleaseImage(&image);
cvReleaseImage(&temp);
cvDestroyWindow("Rectangle Example");
}


编译时出现error C3867: “CMyVideoDlg::my_mouse_callback”: 函数调用缺少参数列表;请使用“&CMyVideoDlg::my_mouse_callback”创建指向成员的指针

无法生成,求真相。

这些监听线程,有时候关闭不了,帮我写一个关闭这些线程的方法, def start_recording_thread(self) -> None: """开始录制线程""" print("Starting to monitor...") self.worker.start_recording() # 设置鼠标移动回调 def on_mouse_move(x, y): print(f"Mouse moved to ({x}, {y})") self.task_queue.put({'type': 'move', 'x': x, 'y': y}) # 将鼠标事件放入队列 print(f"Task added: {x}, {y}, Queue size: {self.task_queue.qsize()}") # 设置鼠标点击回调 def on_mouse_click(x, y, button): print(f"Mouse clicked at ({x}, {y}) with button {button}") self.task_queue.put({'type': 'click', 'x': x, 'y': y, 'button': button}) # 将鼠标点击事件封装为任务并放入队列 print(f"Task added: Click ({x}, {y}, {button}), Queue size: {self.task_queue.qsize()}") if self.mouse_event_handler is None: self.mouse_event_handler = MouseEventHandler() # 启动鼠标监听器 self.mouse_event_handler.start_move_listener() self.mouse_event_handler.start_click_listener() self.mouse_event_handler.move_listener.on_move_callback = on_mouse_move self.mouse_event_handler.click_listener.on_click_callback = on_mouse_click # 启动工作线程 self.start_worker_threads() # 设置键盘监听 self.listener_keyboard = keyboard.Listener(on_press=self.on_key_press) self.listener_keyboard.start() print("Please perform the actions you want to record...") @staticmethod def generate_code(control_tree: list) -> str: code_lines = [] # 存储生成的代码行 for code_line in control_tree: code_lines.append(code_line) return '\n'.join(code_lines) @staticmethod def execute_code(code): """执行生成的代码""" exec(code) def start_worker_threads(self): """启动固定数量的工作线程""" for i in range(self.worker_thread_count): # 创建固定数量的线程 thread = threading.Thread(target=self.worker_thread, daemon=True) thread.start() self.threads.app
最新发布
03-26
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值