4.5.1 _IplImage
#ifdef __cplusplus
typedef struct _IplImage IplImage;
CV_EXPORTS _IplImage cvIplImage(const cv::Mat& m);
#endif
IplImage取自Intel图像处理库,其格式是本机的。OpenCV只支持IplImage格式的一个子集,如上面的参数列表所示。
除了上述限制之外,OpenCV处理roi的方式也有所不同。OpenCV函数要求所有源图像和目标图像的图像大小或ROI大小完全匹配。另一方面,Intel图像处理库处理源图像和目标图像(或roi)之间的交集区域,允许它们独立地变化。
typedef struct
_IplImage
{
int nSize; /**< sizeof(IplImage) */
int ID; /**< version (=0)*/
int nChannels; /** 大多数OpenCV功能支持1、2、3或4个通道*/
int alphaChannel; /**< Ignored by OpenCV */
int depth; /**< 像素深度位:支持IPL_DEPTH_8U、IPL_DEPTH_8S、IPL_DEPTH_16S、IPL_DEPTH_32S、IPL_DEPTH_32F和IPL_DEPTH_64F。. */
char colorModel[4]; /**< Ignored by OpenCV */
char channelSeq[4]; /**< 同上*/
int dataOrder; /**< 0 -交叉的颜色通道,1 -单独的颜色通道。 cvCreateImage只能创建交错的图像 */
int origin; /**< 0 - top-left origin,
1 - bottom-left origin (Windows bitmaps style). */
int align; /**< 图像行对齐(4或8)。OpenCV忽略它,而是使用widthStep。 */
int width; /**< 图像宽度(以像素为单位) */
int height; /**< 图像高度(以像素为单位) */
struct _IplROI *roi; /**< 图像ROI。如果为空,则选择整个图像。*/
struct _IplImage *maskROI; /**< Must be NULL. */
void *imageId; /**< " " */
struct _IplTileInfo *tileInfo; /**< " " */
int imageSize; /**< 以字节为单位的图像数据大小(==图像->高度*图像->宽度步长,用于交叉数据)*/
char *imageData; /**< 指向对齐的图像数据的指针。 */
int widthStep; /**<对齐后的图像行大小(以字节为单位)。 */
int BorderMode[4]; /**< Ignored by OpenCV. */
int BorderConst[4]; /**< 同上. */
char *imageDataOrigin; /**< 指向原始图像数据的指针(不一定对齐)——需要正确的重分配 */
#if defined(CV__ENABLE_C_API_CTORS) && defined(__cplusplus)
_IplImage() {}
_IplImage(const cv::Mat& m) { *this = cvIplImage(m); }
#endif
}
IplImage;