我有一个已经包含图像的位图数组,然后我需要构造一个openCV对象来操作它。我看到的唯一构造函数是:
cv::imread(fileName...);
从现有结构创建图像有哪些其他方法?
OpenCV 2.3
答案 0 :(得分:3)
获取指向数据,图像通道和尺寸的指针,并使用众多构造函数中的一个:
Mat image(width, height, CV_8UC3, ucharDataPtr);
这里,CV_8UC3是索引数据类型的openCV方式。 8表示8位,U表示无符号 - 因此它是无符号字符 - 默认图像格式。 C3表示3个通道。如果您的位图具有Alpha通道,您将编写CV_8UC4。如果它是灰色的,那么CV_8UC1,依此类推。
重要:强>
此构造函数不会复制数据。因此,请确保在使用Mat时保持原始位图对象处于活动状态。如果要复制它,构造函数中有一个“withCopy参数”。只需查看文档。
答案 1 :(得分: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)