- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IplImage, CvMat, Mat 的关系和相互转换
(转载)
opencv 中常见的与图像操作有关的数据容器有Mat,cvMat 和IplImage,这三种类型都可以
代表和显示图像,但是,Mat 类型侧重于计算,数学性较高,openCV 对Mat 类型的计算也
进行了优化。而CvMat 和IplImage 类型更侧重于“图像”,opencv 对其中的图像操作(缩放、
单通道提取、图像阈值操作等)进行了优化。在opencv2.0 之前,opencv 是完全用C 实现的,
但是,IplImage 类型与CvMat 类型的关系类似于面向对象中的继承关系。实际上,CvMat 之
上还有一个更抽象的基类CvArr,这在源代码中会常见。
1. IplImage
opencv 中的图像信息头,该结构体定义:
View Code
typedef struct _IplImage
{
int nSize;
int ID;
int nChannels;
int alphaChannel;
int depth;
char colorModel[4];
char channelSeq[4];
int dataOrder;
int origin;
int align;
int width;
int height;
struct _IplROI *roi;
struct _IplImage *maskROI;
void *imageId;
struct _IplTileInfo *tileInfo;
int imageSize;
char *imageData;
int widthStep;
int BorderMode[4];
int BorderConst[4];
char *imageDataOrigin;
} IplImage;
dataOrder 中的两个取值:交叉存取颜色通道是颜色数据排列将会是BGRBGR...的交错排列。
分开的颜色通道是有几个颜色通道就分几个颜色平面存储。roi 是 IplROI 结构体,该结构体
包含了xOffset,yOffset,height,width,coi 成员变量,其中xOffset,yOffset 是x,y 坐标,coi 代表
channel of interest(感兴趣的通道),非0 的时候才有效。访问图像中的数据元素,分间接存
储和直接存储,当图像元素为浮点型时,(uchar *) 改为 (float *):
View Code
IplImage* img=cvLoadImage(lena.jpg, 1);
CvScalar s;
s=cvGet2D(img,i,j);
cvSet2D(img,i,j,s);
IplImage* img; //malloc memory by cvLoadImage or cvCreateImage
for(int row = 0; row img-height; row++)
{
for (int col = 0; col img-width; col++)
{
b = CV_IMAGE_ELEM(img, UCHAR, row, col * img-nChannels + 0);
g = CV_IMAGE_ELEM(img, UCHAR, row, col * img-nChannels + 1);
r = CV_IMAGE_ELEM(img, UCHAR, row, col * img-nChannels + 2);
}
}
IplImage* img; //malloc memory by cvLoadImage or cvCreateImage
uchar b, g, r; // 3 channels
for(int row = 0; row img-height; row++)
{
for (int col = 0; col img-width; col++)
{
b = ((uchar *)(img-imageData + row * img-widthStep))[col * img-nChannels + 0];
g = ((uchar *)(img-imageData + row * img-widthStep))[col *
文档评论(0)