cvSetImageData和cvCreateImage c ++等效接口

时间:2013-02-11 10:58:28

标签: c++ c opencv legacy-code data-conversion

是否有任何c ++ opencv接口可以对这两个函数执行相同的操作?

嗨,我实际上是以这种方式使用这两个函数

IplImage *image;
ARUint8 *dataPtr; // unsigned chars, in format ARGB
cv::Size size;

//do stuff

image = cvCreateImage(*size, IPL_DEPTH_8U, channels );

cvSetImageData( image, dataPtr, size->width * channels );

最合适的创建用于初始化空IplImage *图像,第二个用于将原始数据从外部源(dataPtr)复制到图像本身。

我知道第一个应该是微不足道的,取代IplImage con un cv :: Mat,问题是我不知道如何将参数“IPL_DEPTH_8U”传递给构造函数。

要使用c ++接口复制数据,我没有线索......

PS:ARUint8 * dataPtr是我的数据来源,我不能有其他来源,但后来我需要将其转换为opencv数据表示

提前致谢!

1 个答案:

答案 0 :(得分:1)

就像您怀疑的那样,在C ++界面中,您可以通过cv::Mat的构造函数执行此操作。您必须使用与IPL_DEPTH_8U相对应的相应类型(可能CV_8UCV_8UC3,具体取决于您拥有的频道数量。)

其中一个构造函数重载可以获取指向现有数据的原始指针,因此您可以这样做:

cv::Mat image(size, CV_8U, (void*)dataPtr);

另请注意,cv :: Mat构造函数可以采用step参数,如果数据在行末有填充或任何其他更复杂的格式,则需要该参数。

您还可以随时浏览OpenCV documentation for Mat::Mat online以获取更多详细信息。