opencv 常用函数说明

2019-08-29 18:33

1.opencv的IplImage结构中有这么一个成员:depth。 其取值如下: 枚举值

用%d输出 二进制

IPL_DEPTH_8U : 8 : 0x0000 0008 IPL_DEPTH_8S :

-2147483640 : 0xffff fff8

IPL_DEPTH_16U : 16 : 0x0000 0010

IPL_DEPTH_16S : -2147483632 : 0xffff fff0 IPL_DEPTH_32S : -2147483616 : 0xffff ffe0 IPL_DEPTH_32F : 32 : 0x0000 0020 IPL_DEPTH_64F : 64 : 0x0000 0040

从文件或摄像头直接读取的图像一般都是8U的

当有特殊计算需求时可以用cvScale() 或cvCvtScale() 转换。 保存时必须转换回8U!

不同的深度其取值范围不一样: 0.0--1.0之间 IPL_DEPTH_64F 0.0--1.0之间 IPL_DEPTH_32F 0--65535之间 IPL_DEPTH_32S -32768--32767之间 IPL_DEPTH_16S 0--65535之间 IPL_DEPTH_16U -128--127之间 IPL_DEPTH_8S 0--255之间 IPL_DEPTH_8U

不同深度图像的转换:要注意范围

比如IPL_DEPTH_8U 转到 IPL_DEPTH_32U

要用cvConvertScale(pImg8, pImg32, 1.0/255, 0); 要除255 反过来IPL_DEPTH_32F 到 IPL_DEPTH_8U

要:cvConverScale(pImg32, pImg8, 255, 0);要乘以2

2.IplImage由CvMat派生,而CvMat由CvArr派生即CvArr -> CvMat -> IplImage

CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理。 3.void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN,

int param1=3, int param2=0, double param3=0 ,double param4=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. 平滑操作的第一个参数. 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvLaplace相似)和32位浮点数到32位浮点数的变换格式。

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

中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像. 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的值,从而消除孤立的噪声点。

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

6.OpenCV 中计算两个数组差的绝对值的函数。

7.函数 cvThreshold 对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像。(cvCmpS 也可以达到此目的) 或者是去掉噪声,例如过滤很小或很大象素值的图像点。本函数支持的对图像取阈值的方法由 threshold_type 确定。

形式:void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );

8.函数 cvThreshold 对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像。(cvCmpS 也可以达到此目的) 或者是去掉噪声,例如过滤很小或很大象素值的图像点。本函数支持的对图像取阈值的方法由 threshold_type 确定。

9.cvErode,是opencv库中的一个函数。函数形式为:void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );研究方法:src:输入图像。dst:输出图像。element:用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素,iterations:腐蚀的次数。

cvErode()腐蚀后cvDilate()膨胀,叫作开操作,那些离散点或游丝线、毛刺就被过滤, cvDilate()膨胀后cvErode()腐蚀,叫作闭操作,那些断裂处就被缝合。

汽车图像还存在一些竖向的纹理(如车身,车灯等)我们需要排除这些干扰信息,并把临近的字符边缘连通起来。这一阶段主要利用对图像进行形态学操作,即作闭合(先膨胀在腐蚀)开启(先腐蚀再膨胀)运算,膨胀可以把临近边缘连接成一个整体,腐蚀可以滤除一些细碎的边缘(建议使用3*1的结构进行操作)经过形态学变换可以滤除噪声边缘,得到车牌区域。 10.cvRunningAvg函数是opencv库中的一个函数。 作用:用来更新移动平均。

函数形式:

void cvRunningAvg(const CvArr * image, CvArr* acc, double alpha, const CvArr* mask=NULL) 参数说明:

image:输入图像,1或3通道,8比特或32比特的float型 acc:累加器,和image一样大小 alpha:更新时,image所占的权重 mask:操作符掩码

if mask(x,y)!= 0 (1-alpha)*acc(x,y)+alpha*image(x,y) =>acc(x,y) 11.cvRunningAvg函数是opencv库中的一个函数。 作用:用来更新移动平均。 函数形式:

void cvRunningAvg(const CvArr * image, CvArr* acc, double alpha, const CvArr* mask=NULL) 参数说明:

image:输入图像,1或3通道,8比特或32比特的float型 acc:累加器,和image一样大小 alpha:更新时,image所占的权重 mask:操作符掩码

if mask(x,y)!= 0 (1-alpha)*acc(x,y)+alpha*image(x,y) =>acc(x,y) 12.cvThreshold

void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );

src:原始数组 (单通道 , 8-bit of 32-bit 浮点数)。dst:输出数组,必须与 src 的类型一致,或者为 8-bit。 threshold:阈值

max_value:使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。 13.函数cvNot(const CvArr* src,CvArr* dst)会将src中的每一个元素的每一位取反,然后把结果赋给dst。因此,一个值为0x00的8位图像将被映射到0xff,而值为0x83的图像将被映射到0x7c。

cvNot(const CvArr* src,CvArr* dst) canny中函数说明

13 cvSmooth,其函数声明为:

cvSmooth( const void* srcarr, void* dstarr, int smoothtype,int param1, int param2, double param3 )

cvSmooth函数的作用是对图象做各种方法的图象平滑。其中,srcarr为输入图象;dstarr为输出图象;

param1为平滑操作的第一个参数;param2为平滑操作的第二个参数(如果param2值为0,则表示它被设为param1);

param3是对应高斯参数的标准差。

参数smoothtype是图象平滑的方法选择,主要的平滑方法有以下五种:

CV_BLUR_NO_SCALE:简单不带尺度变换的模糊,即对每个象素在 param1×param2领域求和。

CV_BLUR:对每个象素在param1×param2邻域求和并做尺度变换 1/(param1?param2)。 CV_GAUSSIAN:对图像进行核大小为param1×param2的高斯卷积。

CV_MEDIAN:对图像进行核大小为param1×param1 的中值滤波(邻域必须是方的)。

CV_BILATERAL:双向滤波,应用双向 3x3 滤波,彩色设置为param1,空间设置为param2。 14 void cvNot(const CvArr* src,CvArr* dst);

函数cvNot()会将src中的每一个元素的每一位取反,然后把结果赋给dst。

因此,一个值为0x00的8位图像将被映射到0xff,而值为0x83的图像将被映射到0x7c。 15 void cvCanny( const CvArr* image, CvArr* edges, double threshold1,double threshold2, int aperture_size=3 );

采用 Canny 算法做边缘检测 image 输入图像 edges

输出的边缘图像 threshold1 第一个阈值 threshold2 第二个阈值 aperture_size

Sobel 算子内核大小

主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:

Sobel算子

图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。

然后可用以下公式计算梯度方向。

在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。

16、void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );

在使用这个函数之前,你必须用cvCreateImage()一类的函数先开一段内存,然后传递给dst。

cvCopy会把src中的数据复制到dst的内存中。 17、cvCreateTrackbar

创建trackbar并将它添加到指定的窗口。

int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change ); trackbar_name

被创建的trackbar名字。 window_name

窗口名字,这个窗口将为被创建trackbar的父对象。 value

整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。 count

滑块位置的最大值。最小值一直是0。 on_change

每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,

并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar显示在指定窗口的顶端。*/ 18 cvcopy : 拷贝一个数组给另一个数组 void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL ); mask 操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。 函数cvCopy从输入数组中复制选定的成分到输出数组: 如果mask(I)!=0,则dst(I)=src(I)。 如果输入输出数组中的一个是IplImage类型的话,其ROI和COI将被使用。输入输出数组必须是同样的类型、维数和大小。函数也可以用来复制散列数组(这种情况下不支持mask)。 19. callback 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 20. CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) ); int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change ); 参数: trackbar_name 被创建的trackbar名字。 window_name 窗口名字,这个窗口将为被创建trackbar的父对象。 value 整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。 count 滑块位置的最大值。最小值一直是0。 on_change 每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。 函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。


opencv 常用函数说明.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Quartus常见错误分析 Error

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: