IplImage结构体

来源:互联网 发布:标准件网络销售 编辑:程序博客网 时间:2024/05/16 10:15
一、IplImage的一些重要成员:

1、origin:图像原点的定义。=0,则图片的左上角是原点;=1,则左下角是原点。                                                                   IplImage* img=cvLoadImage("图片路径");                                                                            img->origin=0,1;

2、depth:图像颜色深度,有6种取值

3、widthStep:一行的字节数

6、nChannels:图像的通道数,(B,G,R),一个像素点对应3个值(B,G,R);

 

二、访问图像像素点:

imageData是图像的起始地址:                                                                       IplImage* img;                                                                                                                     usigned char* prow=(usigned char*) (img->imageData+y*img->widthStep);       //prow指针指向图像img第y行的起始地址

 

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

int main(int argc, char* argv[])
{
IplImage *img=cvLoadImage("E:\\大四上\\openCV\\水果\\1.jpg",2|4);
IplImage *b_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); //b通道图像
IplImage *g_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);//g通道图像
IplImage *r_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);//r通道图像*/
int y,x;
for(y=0;y<img->height;y++)
{
unsigned char* prow=(unsigned char*)(img->imageData+y*img->widthStep);
unsigned char* b_prow=(unsigned char*)(b_img->imageData+y*b_img->widthStep);
unsigned char* g_prow=(unsigned char*)(g_img->imageData+y*g_img->widthStep);
unsigned char* r_prow=(unsigned char*)(r_img->imageData+y*r_img->widthStep);
for(x=0;x<img->width;x++)
{
b_prow[x]=prow[x*3+0];
g_prow[x]=prow[x*3+1];
r_prow[x]=prow[x*3+2];

}
}

cvNamedWindow("img");
cvNamedWindow("b_img");
cvNamedWindow("g_img");
cvNamedWindow("r_img");

cvShowImage("img",img);
cvShowImage("b_img",b_img);
cvShowImage("g_img",g_img);
cvShowImage("r_img",r_img);
cvWaitKey(0);

return 0;
}

 

结果截图:

 

三、ROI:在一幅图像中,感兴趣的区域(一个矩形区域)

  对图像设置ROI区域的方法:cvSetImageROI(img,rect);   //img是图像,rect是矩形区域

  取消ROT区域:cvResetImageROI(img);

  把img2添加到img1这幅图像上:cvCopy(img2,img1);在用的时候,必须保证两幅图像的格式相同,并且同为彩色图像或灰度图像

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

int main(int argc, char* argv[])
{
IplImage* img1=cvLoadImage("E:\\大四上\\openCV\\水果\\苹果.png");
IplImage* img2=cvLoadImage("E:\\大四上\\openCV\\水果\\梨.png");

CvRect rect=cvRect( 40, 25, img2->width, img2->height); //矩形
cvSetImageROI(img1,rect); //对图像设置ROI区域
cvNamedWindow("img1");
cvCopy(img2,img1); //把img2复制到img1上面
cvResetImageROI(img1); //取消ROI区域
cvShowImage("img1",img1);
cvWaitKey(0);
return 0;
}

0 0
原创粉丝点击