一、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;
}