opencv最基础的图像处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

openCV——几个实用函数

2010年12月20日星期一 09:18

1. cvSmooth:各种方法的图像平滑

void cvSmooth( const CvArr* src, CvArr* dst,

int smoothtype=CV_GAUSSIAN,

int param1=3, int param2=0, double param3=0 );

src

输入图像.

dst

输出图像.

smoothtype

平滑方法:

. CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数cvIntegral 计算积分图像。

. CV_BLUR (simple blur) - 对每个象素param1×param2邻域求和并做尺度变换 1/(param1.param2).

. CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为

param1×param2 的高斯卷积

. CV_MEDIAN (median blur) - 对图像进行核大小为

param1×param1 的中值滤波 (i.e. 邻域是方的).

. CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色

sigma=param1,空间 sigma=param2. 平滑操作的第一个参数.

param2

平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果

param2的值为零,则表示其被设定为param1。

param3

对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:

sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,

n=param2 对应垂直核.

对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有sigma 计算 (以保证足够精确的操作).

函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。

没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。

简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。

中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像.

2.IplImage结构

由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。IplImage结构具体定义如下:

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结构体是整个OpenCV函数库的基础,在定义该结构变量时需要用到函数cvCreatImage,变量定义方法如下:

IplImage* src="/cvCreateImage"(cvSize(400,300),

IPL_DEPTH_8U,3);

上句定义了一个IplImage指针变量src,图像的大小是400×300,图像颜色深度8位,3通道图像。

3.常用的五个函数(I/O)

1). 图像载入函数

函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage 指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下:

IplImage* cvLoadImage( const char* filename, int iscolor);

其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor

是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。

2). 窗口定义函数

函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下:

相关文档
最新文档