首先交待几个宏定义:
char *imageData; /* Pointer to aligned image data. */
imageData 指向存储图像数据的一块数据区。
<span style="font-size:14px;">int widthStep; /* Size of aligned image row in bytes. */</span>
widthstep是指图像每行所占的字节数,主要要和width区别,width是指每行所含的像素个数,但是一个像素也可能占一个字节,也可能占三个字节或者四个。
创建3通道的图像,因此每个像素点占据3个数据点ptr[3*x],ptr[3*x+1],ptr[3*x+2],分别对应R,G,B
#include<highgui.h>
using namespace std;
int i,j;
int main()
{
IplImage *img = cvCreateImage( cvSize(400,400),IPL_DEPTH_8U,3 );//400*400,3channel
for(int y=0;y<img->height;y++)//row
{
uchar *ptr=(uchar*)( img->imageData + y*img->widthStep );
for(int x=0;x<img->width;x++)//row+column
{
ptr[3*x]=0;//R
ptr[3*x+1]=0;//G
ptr[3*x+2]=0;//B
}
}
for(int y=10;y<390;y++)
{
uchar*ptr=(uchar*)(img->imageData + y*img->widthStep);
for(int x=10;x<390;x++)
{
ptr[3*x]=240;//R
ptr[3*x+1]=248;//G
ptr[3*x+2]=255;//B
}
}
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvShowImage("Example1",img);
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow("Example1");
return 0;
}