【发布时间】:2021-11-24 06:38:31
【问题描述】:
我在我的项目中使用 3rd 方 SDK,它接受 void * 指针来设置用户特定的元数据。但我的元数据是cv::Mat 格式,因此我需要将cv::Mat 转换为void * 指针,如下所示:
void *set_metadata_ptr(cv::Mat frame)
{
cv::Mat *user_metadata = new cv::Mat();
frame.copyTo(*user_metadata);
return (void *)user_metadata;
}
void foo()
{
UserMeta *user_meta = /* ... */;
user_meta->user_meta_data = (void *)set_metadata_ptr(frame);
}
这很好用,但许多 OpenCV 高级用户不鼓励将指针与 cv::Mat 一起使用,因为 cv::Mat 本身具有 智能指针。我想知道在我的情况下有没有更好的方法将 cv::Mat 转换为 void-pointer?
【问题讨论】:
-
我认为你的意思是空指针。
-
你所做的很糟糕,但如果你确保最终删除新对象,这是可以容忍的。 -- 我建议创建没有
new(你知道RAII)的Mat,并传递它的地址。 但是确保它的生命周期涵盖了指针的使用! -- 你想要解决的真正的问题是什么?给出上下文。 en.wikipedia.org/wiki/XY_problem -
这是一个问得很糟糕的问题。从开始你为什么需要做那个铸造(你写了一些关于第三方库的东西)开始。那么,您正在使用哪个 API 的库是什么,它的功能以及参数必须满足哪些要求。可能需要
void*的原因有很多,从一些 C 之类的回调到自定义版本的矩阵,再到一些图像表示。 -
我的超能力说这可能与此有关:stackoverflow.com/a/17137998/1387438
标签: c++ opencv pointers opencv-mat