是否有任何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数据表示
提前致谢!
答案 0 :(得分:1)
就像您怀疑的那样,在C ++界面中,您可以通过cv::Mat
的构造函数执行此操作。您必须使用与IPL_DEPTH_8U
相对应的相应类型(可能CV_8U
或CV_8UC3
,具体取决于您拥有的频道数量。)
其中一个构造函数重载可以获取指向现有数据的原始指针,因此您可以这样做:
cv::Mat image(size, CV_8U, (void*)dataPtr);
另请注意,cv :: Mat构造函数可以采用step
参数,如果数据在行末有填充或任何其他更复杂的格式,则需要该参数。
您还可以随时浏览OpenCV documentation for Mat::Mat online以获取更多详细信息。