cvSetImageData和cvCreateImage c++;等效接口 有没有C++的OpenCV接口,可以做这两个函数的相同操作?< /P>

cvSetImageData和cvCreateImage c++;等效接口 有没有C++的OpenCV接口,可以做这两个函数的相同操作?< /P>,c++,c,opencv,legacy-code,data-conversion,C++,C,Opencv,Legacy Code,Data Conversion,嗨,我实际上是这样使用这两个函数的 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 ); 创建的第一个用于初始化空IplIm

嗨,我实际上是这样使用这两个函数的

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++接口复制数据,我没有线索…< /P> PS:ARUint8*dataPtr是我的数据源,我不能有其他的数据源,但我需要将其转换为opencv数据表示


提前谢谢

>像您所怀疑的那样,在C++接口中,您通过构造函数执行<代码> CV::MAT。您必须使用与
IPL\u DEPTH\u 8U
对应的适当类型(可能是
CV\u 8U
CV\u 8UC3
,具体取决于您拥有的通道数量)

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

cv::Mat image(size, CV_8U, (void*)dataPtr);
还请注意,cv::Mat构造函数可以采用
步骤
参数,如果数据在行的末尾有填充或任何其他更复杂的格式,则需要该参数

您还可以随时浏览OpenCV以了解更多详细信息