【发布时间】:2018-06-25 19:38:45
【问题描述】:
我正在尝试使自定义类和 OpenCV 之间的转换更容易。
Converting constructors 允许我们声明一个没有explicit 关键字的类并从备用数据类型构造。
例如,我们可以声明两个类:
class Foo
{
public:
std::vector<int32_t> data;
Foo(int k) : data(k) {}
};
class FooProxy : public cv::Mat
{
public:
FooProxy(const Foo & foo) : cv::Mat(foo.data.size(), 1, CV_32SC1, (void*)foo.data.data()) {}
};
然后我们可以创建一个FooProxy,方法是将其设置为相等,然后使用我们想要的任何 OpenCV 函数:
Foo myFoo(3);
myFoo.data = { 1,2,3 };
FooProxy fp = myFoo;
fp.setTo(1);
float myNorm = cv::norm(fp);
std::cout << "myFoo: " << myFoo.data.at(0) << ", " << myFoo.data.at(1) << ", " << myFoo.data.at(2) << "\n";
std::cout << "fp: " << fp.at<int32_t>(0) << ", " << fp.at<int32_t>(1) << ", " << fp.at<int32_t>(2) << "\n";
std::cout << "The Norm is: " << myNorm << "\n";
带输出:
myFoo: 1, 1, 1
fp: 1, 1, 1
The Norm is: 1.73205
但是,我更愿意写:
float myNorm = cv::norm(myFoo);
并让 c++ 自动转换 myFoo。这可能吗?
这行得通:
float myNorm2 = cv::norm(FooProxy(myFoo));
但不是更简单的版本。
【问题讨论】:
标签: c++ opencv type-conversion