2012-01-09 130 views
2

我有一个位图阵列已经包含的图像的图像对象,然后我需要构造一个OPENCV对象来操作它。我看到的唯一构造函数是:OpenCV的,创建从位图

cv::imread(fileName...); 

有什么其他方法可以从现有结构创建图像?

OpenCV 2.3

回答

3

得到的指针数据,图像通道,和尺寸,并使用了许多,许多建设者在那里的一个:

Mat image(width, height, CV_8UC3, ucharDataPtr); 

这里,CV_8UC3是OpenCV的方式来索引数据类型。 8表示8位,U表示无符号 - 所以它是一个无符号字符 - 默认图像格式。 C3表示3个通道。如果你的位图有一个alpha通道,你会写CV_8UC4。如果它是灰色的,则CV_8UC1,依此类推。

重要:

此构造方法不复制数据。因此,请确保在使用Mat时保持原始位图对象处于活动状态。如果你想复制它,那么在构造函数中有一个“withCopy参数”。只需检查文档。

+0

垫图像(宽度,高度,CV_8UC3,ucharDataPtr).clone(),如果你要复制的数据; – 2013-02-06 15:11:16

0

只是指向阵列上的IplImage或cvMat。一个的与CvMat结构如下:

CvMat      // 2D array 
    |-- int type;   // elements type (uchar,short,int,float,double) and flags 
    |-- int step;   // full row length in bytes 
    |-- int rows, cols; // dimensions 
    |-- int height, width; // alternative dimensions reference 
    |-- union data; 
     |-- uchar* ptr;  // data pointer for an unsigned char matrix 
     |-- short* s;  // data pointer for a short matrix 
     |-- int* i;  // data pointer for an integer matrix 
     |-- float* fl;  // data pointer for a float matrix 
     |-- double* db;  // data pointer for a double matrix 

(http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html)