opencv的一些常用函数及其参数

本文详细介绍了OpenCV中IplImage结构体的使用方法,包括图像的创建、加载、显示、转换、尺寸调整及销毁等核心操作。同时,涵盖了基本的绘图函数如线、矩形、圆和椭圆的绘制,以及颜色空间转换等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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决定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值