如何从此 API 类的对象中检索 cv::Mat 对象
How to retrieve a cv::Mat object from an object of this API class?
我试图将另一个类(第三方代码(中的cv::Mat
对象获取到我的主函数中。
我有一堂课:
FrameObserver.h
class FrameObserver : virtual public IFrameObserver
{
public:
FrameObserver( CameraPtr pCamera, FrameInfos eFrameInfos, ColorProcessing eColorProcessing );
cv::Mat m_ConvertImage;
// This is our callback routine that will be executed on every received frame
virtual void FrameReceivedLeft( const FramePtr pFrame );
virtual void FrameReceivedRight(const FramePtr pFrame);
void ProcessCvLeft(const FramePtr pFrame);
void ProcessCvRight(const FramePtr pFrame);
static cv::Mat FrameObserver::getCurrentFrame() { return currentFrame; }
private:
static cv::Mat currentFrame;
#ifdef WIN32
double m_dFrequency;
#endif //WIN32
};
}}} // namespace AVT::VmbAPI::Examples
帧观察者.cpp
void FrameObserver::ProcessCvLeft(const FramePtr pFrame)
{
VmbUchar_t *pBuffer;
VmbUint32_t FrameWidth;
VmbUint32_t FrameHeight;
pFrame->GetWidth(FrameWidth);
pFrame->GetHeight(FrameHeight);
pFrame->GetImage(pBuffer);
ShowFrameInfos(pFrame);
IplImage *img1 = cvCreateImageHeader(cvSize(
FrameWidth,
FrameHeight),
IPL_DEPTH_8U,
1);
cvSetData(img1, pBuffer, img1->widthStep);
cv::Mat copyimageL = cv::cvarrToMat(img1);
currentFrame = copyimageL; //copies to currentFrame here
}
然后我有主要.cpp:
cv::Mat Mainframe;
int main( int argc, char* argv[] )
{
//I need to pull the currentFrame Mat stream into the frame Mat above.
}
最好的方法是什么?我试过:
FrameObserver fo;
cv::Mat test = fo.currentFrame;
但它给了我以下错误:
类"FrameObserver"不存在默认构造函数
谢谢。
就C++而言,您的错误是类FrameObserver
没有默认构造函数(即可以在没有参数的情况下调用的构造函数(。它没有显式定义,也不会生成,因为已经定义了另一个构造函数(请参阅此处(。因此,你不能写
FrameObserver fo;
因为这会调用默认构造函数FrameObserver::FrameObserver()
,而默认构造函数(见上文(不存在。因此,您应该使用带有参数的现有构造函数创建 FrameObserver
对象FrameObserver::FrameObserver( CameraPtr pCamera, FrameInfos eFrameInfos, ColorProcessing eColorProcessing );
现在进入实际问题。由于此类是提供的 API 的一部分,因此您不应该尝试更改它,而应该学习正确使用它。从它的名字来看,它似乎是一个观察者。因此,您需要创建它的实例(单个实例(,并仔细阅读有关它应该如何以矩阵形式提供帧数据的文档。我不知道它究竟是如何工作的,但根据常识,因为它是一个"观察者",它应该会自动为您提供有关传入帧的通知。同样,请仔细查看文档。
重要编辑:
在这里,看看标题:
// This is our callback routine that will be executed on every received frame
virtual void FrameReceivedLeft( const FramePtr pFrame );
virtual void FrameReceivedRight(const FramePtr pFrame);
从外观上看,您应该对FrameObserver
进行子类化并重新实现上述两个函数。这意味着用于处理或提取这些帧的代码必须驻留在要创建的子类中的这些例程中。
无论如何,虽然细节可能会有所不同,但概念仍然存在:观察者将自行调用一些方法。您只能等待它调用这些方法并做出相应的反应。更准确地说,在观察者对象中注册类对象或函数,然后让观察者自动调用这些方法。(据说您"订阅了观察者提供的通知"(。
- 如何检索由带通配符的字符串索引的对象
- 用于从可能不存在的容器中检索对象的 API 设计
- 在 c++ 中使用指向对象的指针检索数据
- 通过 std::bind 从对象成员检索值
- 将 JSON 对象作为参数在 JNI 中传递给 CPP,并在 CPP 中检索 JSON 对象的数据
- C++ 从树中检索对象
- 检索不同类型的对象指针
- 如何在Boost Serialization中检索多个对象值
- 使用Boost序列化保存和检索多个对象
- C++ 无法检索自定义矢量中的对象
- 如何通过先前存储的ID从结构对象中检索值?C
- 在另一个中检索JSON对象
- c++使用字符串句柄对对象进行通用存储和检索
- 从C 添加和检索类的对象
- 如何从wow64进程中检索特定内核对象的64位地址
- 检索在函数内部使用运算符new分配的类指针对象成员的值时出现的问题
- 从数据库中以 blob 数据类型形式存储的原始图像数据中检索 CImage 对象
- QML:如何检索默认字体对象
- 从继承的对象检索信息
- 从 win32api C++中的 LDAPMessage 对象检索'pre windows 2000 logon'名称