opencv - 在 OpenCV 的回调中使用 shared_ptr/cv::Ptr 作为用户数据
问题描述
我正在使用以下方法在 OpenCV 显示窗口内跟踪鼠标点击:
void on_buttonClick(int event, int x, int y, int flags, void* userdata)
{
// Callback function received
}
void main() {
cv::setMouseCallback(win_name, on_buttonClick, (void*) fun_ptr);
}
最后一个参数fun_ptr
作为user_data
回调的一部分返回。只要我想对用户数据使用函数指针,这很好。
但现在我需要传递std::shared_ptr<CustomClass>
相当于user_data
. 我想传递 a 的原因shared_ptr
是,只要刷新显示窗口的上下文,对象就会自动销毁。
我尝试使用两种机制:
- std::shared_ptr
- cv::Ptr (功能类似于 std::shared_ptr)
下面的示例代码:
class CustomClass {
int x;
int y;
}
int main() {
cv::Ptr<CustomClass> x(new CustomClass());
cv::setMouseCallback(win_name, on_buttonClick, (void*) x);
}
但是,一旦我将 shared_ptr 转换为 (void*),它就会失去它的用途。有没有办法在 OpenCV 中解决这个问题(afaik,使用典型的new
,delete
因为无法确定删除的时间,所以不好)。
解决方案
推荐阅读
- python - 如何查找列表B中有多少项形成列表A
- python - Pandas - 在返回车站之前找到最大的出租车停靠站数量
- reactjs - 使用 Storybook.js 提供静态资产
- asp.net - 您如何构建物理和逻辑/解决方案文件夹?
- flutter - 将数据传递给 initState 函数
- javascript - 在 Firestore javascript 中保存为字符串的数字
- css - 如何将元素设置为高度 0px?
- .htaccess - 我使用 .htaccess 创建了一个动态子文件夹,但浏览器在根文件夹中找不到图像
- r - 调整列大小后删除 ggplot2 图上方和下方的空白
- git - 对 git blame 使用与其他命令相同的提交缩写长度