LPVOID :LPVOID是一个没有类型的指针,也就是说你可以将LPVOID类型的变量赋值给任意类型的指针
IplImage :IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。
IplImage结构体是整个OpenCV函数库的基础,在定义该结构变量时需要用到函数cvCreatImage,变量定义方法如下:
IplImage* src="/cvCreateImage"(cvSize(400,300), IPL_DEPTH_8U,3);
定义了一个IplImage指针变量src,图像的大小是400×300,图像颜色深度8位,3通道图像。
结构体如下:typedef struct _IplImage
{
int nSize; /* IplImage大小 */
int ID; /* 版本 (=0)*/
int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */
int alphaChannel; /* 被OpenCV忽略 */
int depth; /* 像素的位深度,主要有以下支持格式: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S,
IPL_DEPTH_32F 和IPL_DEPTH_64F */
char colorModel[4]; /* 被OpenCV忽略 */
char channelSeq[4]; /* 同上 */
int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.cvCreateImage只可以创建交叉存取图像 */
int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */
int align; /* 图像行排列方式 (4 or 8),在 OpenCV 被忽略,使用 widthStep 代替 */
int width; /* 图像宽像素数 */
int height; /* 图像高像素数*/
struct _IplROI *roi; /* 图像感兴趣区域,当该值非空时,只对该区域进行处理 */
struct _IplImage *maskROI; /* 在 OpenCV中必须为NULL */
void *imageId; /* 同上*/
struct _IplTileInfo *tileInfo; /*同上*/
int imageSize; /* 图像数据大小(在交叉存取格式下ImageSize=image->height*image->widthStep),单位字节*/
char *imageData; /* 指向排列的图像数据 */
int widthStep; /* 排列的图像行大小,以字节为单位 */
int BorderMode[4]; /* 边际结束模式, 在 OpenCV 被忽略*/
int BorderConst[4]; /* 同上 */
char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */
} IplImage;
图像载入函数
IplImage* cvLoadImage( const char* filename, int iscolor);
iscolor是一个辅助参数项,可选正数、零和负数三种值,
正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。
窗口定义函数
int cvNamedWindow( const char* name, unsigned long flags );
name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。
CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。
图像显示函数:在指定的窗口中显示图像
void cvShowImage( const char* name, const CvArr* image );
其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。
图像转换函数
cvGetImage( const CvArr* arr, IplImage* image_header );
图像创建:创建图像首地址,并分配存储空间
IplImage* cvCreateImage( CvSize cvSize(int width, int height), int depth, int channels );
图像像素的位深度(depth),值为可以为下面一种:
IPL_DEPTH_8U - 8位无符号整数
IPL_DEPTH_8S - 8位符号整数
IPL_DEPTH_16U - 16位无符号整数
IPL_DEPTH_16S - 16位符号整数
IPL_DEPTH_32S - 32位符号整数
IPL_DEPTH_32F - 单精度浮点数
IPL_DEPTH_64F - 双精度浮点数
channels:每个像素的通道数可以是1,2,3,4.
图像保存函数:指定的文件名保存IplImage类型的指针变量
int cvSaveImage( const char* filename, const CvArr* image );
其中,filename是图像保存路径和名称,image是IplImage指针变量。
图像销毁函数:函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间
void cvReleaseImage( IplImage** image );
图像尺寸调整函数:重新调整图像src(或它的ROI),使它精确匹配目标dst(或其ROI)。
void Resize (const CvArr * src, // 待处理图像,源图像
CvArr * dst, // 处理后图像
int interpolation = CV_LINTER_LINTER //插值方法,interpolation 修改、插补的方法(具体参数如下)
• CV_INTER_NN - 最近邻差值,
• CV_INTER_LINEAR - 双线性差值 (缺省使用)
• CV_INTER_AREA - 使用象素关系重采样。图缩小时可以避免波纹出现,放大类似CV_INTER_NN方法
• CV_INTER_CUBIC - 立方差值.
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
在使用这个函数之前,你必须用cvCreateImage()一类的函数先开一段内存,然后传递给dst。cvCopy会把src中的数据复制到dst的内存中。
void cvLine ( CvArr * img,CvPoint pt1,CvPoint pt2,CvScalar color,int thickness = 1,int line_type = 8,int shift = 0 ) ;
//画一条线段连接2个点
img :为一个图像类型的指针,指向单通道或多通道的图像。
pt1,pt2:起始点,我们可以用CvPoint(int x,int y)函数快速地构造一个CvPoint类型的变量
color:是四个双精度浮点型变量的集合(double val[4])
type:4或8表示线段的邻接连接线类型
shift:坐标的小数点位数
void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 ; CvSize min_size=cvSize(0,0);CvSize max=cvSize(0,0)); //画矩形
pt1,pt2:表示矩形对角线的2个顶点坐标
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int line_type=8, int shift=0 );//画圆
center:圆心坐标 radius:半径
void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle, double start_angle, double end_angle, CvScalar color, int thickness=1, int line_type=8, int shift=0 );//画椭圆
axes:轴的长度
angle:偏转的角度
start_angle:圆弧起始角的角度
end_angle:圆弧终结角的角度。
int cvRound (double value);//对一个double型的数进行四舍五入,并返回一个整型数
颜色空间转换函数:将一个图像从一个颜色空间转换到另一个颜色空间,默认的颜色制式排列是BGR
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
. InputArray src: 输入图像即要进行颜色空间变换的原图像,可以是Mat类
. OutputArray dst: 输出图像即进行颜色空间变换后存储图像,也可以Mat类
. int code: 转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片
. int dstCn = 0: 目标图像通道数,如果取值为0,则由src和code决定