【发布时间】:2012-09-07 17:57:22
【问题描述】:
我正在使用the reference from the OpenCV docs 创建自己的算法,继承自 cv::Algorithm。我创建了自己的类,这些类成功地从 cv::Algorithm 继承,但我在使用这个时遇到了困难,因为它有一个成员 m_model,它是来自一个无法修改的库的结构,因为 MyAlgorithm 类将功能包装在此结构中。
无论如何,我试图引用结构中的一个成员,它是一个 `uchar[3],所以我将它包装在一个 cv::Ptr 中。 当我在 addParam 方法上编译没有和 getter 或 setter 的程序时
obj.info()->addParam<uchar[3]>(obj, "arrPtr", *arrPtr, false);
代码编译得很好,但是当我尝试将 write 一个 MyAlgorithm 对象归档时出现运行时错误,因为它无法获取数据。它正在寻找一个名称为arr 的成员变量,但它不存在。所以我在m_model类成员中为arr参数定义了一些getter和setter方法。
但是,我不确定如何将成员函数指针传递给 addParams 方法。我知道我不能像我目前在下面的代码中所做的那样将它们传递给 addParams 方法。我还尝试了以下方法:
obj.info()->addParam<uchar[3]>(obj, "arr", *arrPtr, false, &MyAlgorithm::getArr, &MyAlgorithm::setArr);
但我得到一个编译错误:
cannot convert parameter 5 from 'cv::Ptr<_Tp> (__thiscall MyAlgorithm::* )(void)' to 'cv::Ptr<_Tp> (__thiscall cv::Algorithm::* )(void)'
以下是我的源代码的精简示例。任何帮助将不胜感激。
my_algorithm.h
class MyAlgorithm : public cv::Algorithm {
public:
//Other class logic
cv::Ptr<uchar[3]> getArr();
void setArr(const cv::Ptr<uchar[3]> &arrPtr);
virtual cv::AlgorithmInfo* info() const;
protected:
//define members such as m_model
};
cv::Algorithm* createMyAlgorithm();
cv::AlgorithmInfo& MyAlgorithm_info();
我的算法.cpp
cv::Algorithm* createMyAlgorithm()
{
return new MyAlgorithm();
}
cv::AlgorithmInfo& MyAlgorithm_info()
{
static cv::AlgorithmInfo MyAlgorithm_info_var("MyAlgorithm", createMyAlgorithm);
return MyAlgorithm_info_var;
}
cv::AlgorithmInfo* MyAlgorithm::info() const
{
static volatile bool initialized = false;
if( !initialized )
{
initialized = true;
MyAlgorithm obj;
cv::Ptr<uchar[3]> *arrPtr = new cv::Ptr<uchar[3]>(&(obj.m_model->arr));
obj.info()->addParam<uchar[3]>(obj, "arr", *arrPtr, false, &getArr, &setArr);
}
return &MyAlgorithm_info();
}
cv::Ptr<uchar[3]> MyAlgorithm::getArr(){
//Logic to get arr
}
void MyAlgorithm::setArr(const cv::Ptr<uchar[3]> &arrPtr){
//Logic to set arr
}
【问题讨论】:
标签: c++ algorithm image-processing opencv member-function-pointers