Opencv4.x中Mat与IplImage的转换
Mat转IPLImage
IplImage img = cvIplImage(mat);
IplImage转Mat
//! converts array (CvMat or IplImage) to cv::Mat
Mat cvarrToMat(const CvArr* arr, bool copyData=false,
bool allowND=true, int coiMode=0,
AutoBuffer* buf=0);
Opencv3.x中Mat与IplImage的转换
Mat转IPLImage
IplImage img = IplImage(mat);
IplImage转Mat
Mat mat=cvarrToMat(img);
Mat cvarrToMat(const CvArr* arr, bool copyData=false,
bool allowND=true, int coiMode=0,
AutoBuffer* buf=0);
opencv2.x中Mat与IplImage的转换
Mat转IPLImage
IplImage img = IplImage(mat);
IplImage转Mat
IplImage * ipl1, * ipl2;
const cv::Mat m1 = cv::Mat(ipl);
cv::Mat m2 = ipl2;
1. IplImage
1 typedef struct _IplImage
2 {
3 int nSize; /* IplImage大小 */
4 int ID; /* 版本 (=0)*/
5 int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */
6 int alphaChannel; /* 被OpenCV忽略 */
7 int depth; /* 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,
8 IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */
9
10 char colorModel[4]; /* 被OpenCV忽略 */
11 char channelSeq[4]; /* 被OpenCV忽略 */
12 int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道. cvCreateImage只能创建交叉存取图像 */
13 int origin; /* 0 - 顶—左结构,1 - 底—左结构 (Windows bitmaps 风格) */
14 int align; /* 图像行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */
15
16 int width; /* 图像宽像素数 */
17 int height; /* 图像高像素数*/
18
19 struct _IplROI *roi; /* 图像感兴趣区域. 当该值非空只对该区域进行处理 */
20 struct _IplImage *maskROI; /* 在 OpenCV中必须置NULL */
21 void *imageId; /* 同上*/
22 struct _IplTileInfo *tileInfo; /*同上*/
23
24 int imageSize; /* 图像数据大小(在交叉存取格式下imageSize=image->height*image->widthStep),单位字节*/
25 char *imageData; /* 指向排列的图像数据 */
26 int widthStep; /* 排列的图像行大小,以字节为单位 */
27 int BorderMode[4]; /* 边际结束模式, 被OpenCV忽略 */
28 int BorderConst[4]; /* 同上 */
29
30 char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */
31 } IplImage;
2.CvMat
1 typedef struct CvMat
2 {
3 int type;
4 int step; /*用字节表示行数据长度*/
5 int* refcount; /*内部访问*/
6 union {
7 uchar* ptr;
8 short* s;
9 int* i;
10 float* fl;
11 double* db;
12 } data; /*数据指针*/
13 union {
14 int rows;
15 int height;
16 };
17 union {
18 int cols;
19 int width;
20 };
21 } CvMat; /*矩阵结构头*/
3.Mat
1 class CV_EXPORTS Mat
2 {
3
4 public:
5
6 /*..很多方法..*/
7 /*............*/
8
9 int flags;(Note :目前还不知道flags做什么用的)
10 int dims; /*数据的维数*/
11 int rows,cols; /*行和列的数量;数组超过2维时为(-1,-1)*/
12 uchar *data; /*指向数据*/
13 int * refcount; /*指针的引用计数器; 阵列指向用户分配的数据时,指针为 NULL
14
15
16 /* 其他成员 */
17 ...
18
19 };
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)