opencv中文手册

opencv中文手册
opencv中文手册

目录

? 1 梯度、边缘和角点

o 1.1 Sobel

o 1.2 Laplace

o 1.3 Canny

o 1.4 PreCornerDetect

o 1.5 CornerEigenValsAndVecs

o 1.6 CornerMinEigenVal

o 1.7 CornerHarris

o 1.8 FindCornerSubPix

o 1.9 GoodFeaturesToTrack ? 2 采样、插值和几何变换

o 2.1 InitLineIterator

o 2.2 SampleLine

o 2.3 GetRectSubPix

o 2.4 GetQuadrangleSubPix

o 2.5 Resize

o 2.6 WarpAffine

o 2.7 GetAffineTransform

o 2.8 2DRotationMatrix

o 2.9 WarpPerspective

o 2.10 WarpPerspectiveQMatrix

o 2.11 GetPerspectiveTransform

o 2.12 Remap

o 2.13 LogPolar

? 3 形态学操作

o 3.1 CreateStructuringElementEx

o 3.2 ReleaseStructuringElement

o 3.3 Erode

o 3.4 Dilate

o 3.5 MorphologyEx

? 4 滤波器与色彩空间变换

o 4.1 Smooth

o 4.2 Filter2D

o 4.3 CopyMakeBorder

o 4.4 Integral

o 4.5 CvtColor

o 4.6 Threshold

o 4.7 AdaptiveThreshold

? 5 金字塔及其应用

o 5.1 PyrDown

o 5.2 PyrUp

? 6 连接部件

o 6.1 CvConnectedComp

o 6.2 FloodFill

o 6.3 FindContours

o 6.4 StartFindContours

o 6.5 FindNextContour

o 6.6 SubstituteContour

o 6.7 EndFindContours

o 6.8 PyrSegmentation

o 6.9 PyrMeanShiftFiltering

o 6.10 Watershed

?7 图像与轮廓矩

o7.1 Moments

o7.2 GetSpatialMoment

o7.3 GetCentralMoment

o7.4 GetNormalizedCentralMoment

o7.5 GetHuMoments

?8 特殊图像变换

o8.1 HoughLines

o8.2 HoughCircles

o8.3 DistTransform

o8.4 Inpaint

?9 直方图

o9.1 CvHistogram

o9.2 CreateHist

o9.3 SetHistBinRanges

o9.4 ReleaseHist

o9.5 ClearHist

o9.6 MakeHistHeaderForArray

o9.7 QueryHistValue_1D

o9.8 GetHistValue_1D

o9.9 GetMinMaxHistValue

o9.10 NormalizeHist

o9.11 ThreshHist

o9.12 CompareHist

o9.13 CopyHist

o9.14 CalcHist

o9.15 CalcBackProject

o9.16 CalcBackProjectPatch

o9.17 CalcProbDensity

o9.18 EqualizeHist

?10 匹配

o10.1 MatchTemplate

o10.2 MatchShapes

o10.3 CalcEMD2

梯度、边缘和角点

Sobel

使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分

void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );

src

输入图像.

dst

输出图像.

xorder

x 方向上的差分阶数

yorder

y 方向上的差分阶数

aperture_size

扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。除了尺寸为 1,其它情况下,aperture_size ×aperture_size 可分离内核将用来计算差分。

对 aperture_size=1的情况,使用 3x1 或 1x3 内核(不进行高斯平

滑操作)。这里有一个特殊变量 CV_SCHARR (=-1),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel 滤波更精确的结果。Scharr 滤波器系数是:

对 x-方向或矩阵转置后对 y-方向。

函数 cvSobel 通过对图像用相应的内核进行卷积操作来计算图像差分:

由于Sobel 算子结合了 Gaussian 平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。通常情况,函数调用采用如下参数 (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 来计算一阶

x- 或 y- 方向的图像差分。第一种情况对应:

核。

第二种对应:

或者

核的选则依赖于图像原点的定义 (origin 来自 IplImage 结构的定义)。由于该函数不进行图像尺度变换,所以和输入图像(数组)相比,输出图像(数组)的元素通常具有更大的绝对数值(译者注:即像素的位深)。为防止溢出,当输入图像是 8 位的,要求输出图像是 16 位的。当然可以用函数 cvConvertScale 或cvConvertScaleAbs 转换为 8 位的。除了 8-位图像,函数也接受 32-位浮点数图像。所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。

Laplace

计算图像的 Laplacian 变换

void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 ); src

输入图像.

dst

输出图像.

aperture_size

核大小 (与 cvSobel 中定义一样).

函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x- 和 y- 差分,再求和:

对 aperture_size=1 则给出最快计算结果,相当于对图像采用如下内核做卷积:

类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。

Canny

采用 Canny 算法做边缘检测

void cvCanny( const CvArr* image, CvArr* edges, double threshold1,

double threshold2, int aperture_size=3 );

image

单通道输入图像.

edges

单通道存储边缘的输出图像

threshold1

第一个阈值

threshold2

第二个阈值

aperture_size

Sobel 算子内核大小 (见 cvSobel).

函数 cvCanny 采用 CANNY 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。

?注意事项:cvCanny只接受单通道图像作为输入。

?外部链接:经典的canny自调整阈值算法的一个opencv的实现见在OpenCV中自适应确定canny算法的分割门限

PreCornerDetect

计算用于角点检测的特征图,

void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 );

image

输入图像.

corners

保存候选角点的特征图

aperture_size

Sobel 算子的核大小(见cvSobel).

函数 cvPreCornerDetect 计算函数

其中D表示一阶图像差分,表示二阶图像差分。角点被认为是函数的局部最大值:

// 假设图像格式为浮点数

IplImage* corners = cvCloneImage(image);

IplImage* dilated_corners = cvCloneImage(image);

IplImage* corner_mask = cvCreateImage( cvGetSize(image), 8, 1 ); cvPreCornerDetect( image, corners, 3 );

cvDilate( corners, dilated_corners, 0, 1 );

cvSubS( corners, dilated_corners, corners );

cvCmpS( corners, 0, corner_mask, CV_CMP_GE );

cvReleaseImage( &corners );

cvReleaseImage( &dilated_corners );

CornerEigenValsAndVecs

计算图像块的特征值和特征向量,用于角点检测

void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,

int block_size, int aperture_size=3 ); image

输入图像.

eigenvv

保存结果的数组。必须比输入图像宽 6 倍。

block_size

邻域大小 (见讨论).

aperture_size

Sobel 算子的核尺寸(见 cvSobel).

对每个象素,函数 cvCornerEigenValsAndVecs 考虑block_size × block_size 大小的邻域 S(p),然后在邻域上计算图像差分的相关矩阵:

然后它计算矩阵的特征值和特征向量,并且按如下方式(λ1, λ2, x1, y1, x2, y2)存储这些值到输出图像中,其中

λ1, λ2 - M 的特征值,没有排序

(x1, y1) - 特征向量,对λ 1

(x2, y2) - 特征向量,对λ 2

CornerMinEigenVal

计算梯度矩阵的最小特征值,用于角点检测

void cvCornerMinEigenVal( const CvArr* image,

CvArr* eigenval, int block_size, int aperture_size=3 );

image

输入图像.

eigenval

保存最小特征值的图像. 与输入图像大小一致

block_size

邻域大小 (见讨论 cvCornerEigenValsAndVecs).

aperture_size

Sobel 算子的核尺寸(见 cvSobel). 当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数.

函数 cvCornerMinEigenVal 与 cvCornerEigenValsAndVecs 类似,但是它仅仅计算和存储每个象素点差分相关矩阵的最小特征值,即前一个函数的 min(λ1, λ2)

CornerHarris

哈里斯(Harris)角点检测

void cvCornerHarris( const CvArr* image, CvArr* harris_responce,

int block_size, int aperture_size=3, double k=0.04 );

image

输入图像。

harris_responce

存储哈里斯(Harris)检测responces的图像。与输入图像等大。

block_size

邻域大小(见关于cvCornerEigenValsAndVecs的讨论)。

aperture_size

扩展 Sobel 核的大小(见 cvSobel)。格式. 当输入图像是浮点数格式

时,该参数表示用来计算差分固定的浮点滤波器的个数。

k

harris 检测器的自由参数。参见下面的公式。

函数 cvCornerHarris 对输入图像进行 Harris 边界检测。类似于

cvCornerMinEigenVal 和 cvCornerEigenValsAndVecs。对每个像素,在

block_size*block_size 大小的邻域上,计算其2*2梯度共变矩阵(或相关异变矩阵)M。然后,将

det(M) - k*trace(M)2 (这里2是平方)

保存到输出图像中。输入图像中的角点在输出图像中由局部最大值表示。FindCornerSubPix

精确角点位置

void cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners, int count, CvSize win, CvSize zero_zone,

CvTermCriteria criteria );

image

输入图像.

corners

输入角点的初始坐标,也存储精确的输出坐标

count

角点数目

win

搜索窗口的一半尺寸。如果 win=(5,5) 那么使用5*2+1 × 5*2+1 = 11 ×

11 大小的搜索窗口

zero_zone

死区的一半尺寸,死区为不对搜索区的中央位置做求和运算的区域。它是

用来避免自相关矩阵出现的某些可能的奇异性。当值为 (-1,-1) 表示没

有死区。

criteria

求角点的迭代过程的终止条件。即角点位置的确定,要么迭代数大于某个

设定值,或者是精确度达到某个设定值。 criteria 可以是最大迭代数目,或者是设定的精确度,也可以是它们的组合。

函数 cvFindCornerSubPix 通过迭代来发现具有子象素精度的角点位置,或如图所示的放射鞍点(radial saddle points)。

子象素级角点定位的实现是基于对向量正交性的观测而实现的,即从中央点q

到其邻域点p 的向量和p点处的图像梯度正交(服从图像和测量噪声)。考虑以下的表达式:

εi=DIpiT?(q-pi)

其中,DIpi表示在q的一个邻域点pi处的图像梯度,q的值通过最小化εi得到。通过将εi设为0,可以建立系统方程如下:

sumi(DIpi?DIpiT)?q - sumi(DIpi?DIpiT?pi) = 0

其中q的邻域(搜索窗)中的梯度被累加。调用第一个梯度参数G和第二个梯度参数b,得到:

q=G-1?b

该算法将搜索窗的中心设为新的中心q,然后迭代,直到找到低于某个阈值点的中心位置。

GoodFeaturesToTrack

确定图像的强角点

void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image,

CvPoint2D32f* corners, int* corner_count, double quality_level, double min_distance, const CvArr* mask=NULL );

image

输入图像,8-位或浮点32-比特,单通道

eig_image

临时浮点32-位图像,尺寸与输入图像一致

temp_image

另外一个临时图像,格式与尺寸与 eig_image 一致

corners

输出参数,检测到的角点

corner_count

输出参数,检测到的角点数目

quality_level

最大最小特征值的乘法因子。定义可接受图像角点的最小质量因子。

min_distance

限制因子。得到的角点的最小距离。使用 Euclidian 距离

mask

ROI:感兴趣区域。函数在ROI中计算角点,如果 mask 为 NULL,则选择

整个图像。必须为单通道的灰度图,大小与输入图像相同。mask对应的点不为0,表示计算该点。

函数 cvGoodFeaturesToTrack 在图像中寻找具有大特征值的角点。该函数,首先用cvCornerMinEigenVal 计算输入图像的每一个象素点的最小特征值,并将结果存储到变量 eig_image 中。然后进行非最大值抑制(仅保留3x3邻域中的局部最大值)。下一步将最小特征值小于quality_level?max(eig_image(x,y)) 排除掉。最后,函数确保所有发现的角点之间具有足够的距离,(最强的角点第一个保留,然后检查新的角点与已有角点之间的距离大于 min_distance )。

采样、插值和几何变换

InitLineIterator

初始化线段迭代器

int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2, CvLineIterator* line_iterator, int connectivity=8 );

image

带采线段的输入图像.

pt1

线段起始点

pt2

线段结束点

line_iterator

指向线段迭代器状态结构的指针

connectivity

被扫描线段的连通数,4 或 8.

函数 cvInitLineIterator 初始化线段迭代器,并返回两点之间的象素点数目。两个点必须在图像内。当迭代器初始化后,连接两点的光栅线上所有点,都可以连续通过调用 CV_NEXT_LINE_POINT 来得到。线段上的点是使用 4-连通或8-连通利用 Bresenham 算法逐点计算的。

例子:使用线段迭代器计算彩色线上象素值的和

CvScalar sum_line_pixels( IplImage* image, CvPoint pt1, CvPoint pt2 ) {

CvLineIterator iterator;

int blue_sum = 0, green_sum = 0, red_sum = 0;

int count = cvInitLineIterator( image, pt1, pt2, &iterator, 8 );

for( int i = 0; i < count; i++ ){

blue_sum += iterator.ptr[0];

green_sum += iterator.ptr[1];

red_sum += iterator.ptr[2];

CV_NEXT_LINE_POINT(iterator);

/* print the pixel coordinates: demonstrates how to calculate the coordinates */

{

int offset, x, y;

/* assume that ROI is not set, otherwise need to take it into account. */

offset = iterator.ptr - (uchar*)(image->imageData);

y = offset/image->widthStep;

x = (offset - y*image->widthStep)/(3*sizeof(uchar) /* size of pixel */);

printf("(%d,%d)\n", x, y );

}

}

return cvScalar( blue_sum, green_sum, red_sum );

}

SampleLine

将图像上某一光栅线上的像素数据读入缓冲区

int cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2,

void* buffer, int connectivity=8 );

image

输入图像

光栅线段的起点

pt2

光栅线段的终点

buffer

存储线段点的缓存区,必须有足够大小来存储点 max( |pt2.x-pt1.x|+1, |pt2.y-pt1.y|+1 ) :8-连通情况下,或者

|pt2.x-pt1.x|+|pt2.y-pt1.y|+1 : 4-连通情况下.

connectivity

线段的连通方式, 4 or 8.

函数 cvSampleLine 实现了线段迭代器的一个特殊应用。它读取由 pt1 和 pt2 两点确定的线段上的所有图像点,包括终点,并存储到缓存中。

GetRectSubPix

从图像中提取象素矩形,使用子象素精度

void cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center );

src

输入图像.

dst

提取的矩形.

center

提取的象素矩形的中心,浮点数坐标。中心必须位于图像内部.

函数 cvGetRectSubPix 从图像 src 中提取矩形:

dst(x, y) = src(x + center.x - (width(dst)-1)*0.5, y + center.y - (height(dst)-1)*0.5)

其中非整数象素点坐标采用双线性插值提取。对多通道图像,每个通道独立单独完成提取。尽管函数要求矩形的中心一定要在输入图像之中,但是有可能出现矩形的一部分超出图像边界的情况,这时,该函数复制边界的模识(hunnish:即用于矩形相交的图像边界线段的象素来代替矩形超越部分的象素)。

GetQuadrangleSubPix

提取象素四边形,使用子象素精度

void cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst, const CvMat* map_matrix );

输入图像.

dst

提取的四边形.

map_matrix

3 × 2 变换矩阵 [A|b] (见讨论).

函数 cvGetQuadrangleSubPix 以子象素精度从图像 src 中提取四边形,使用子象素精度,并且将结果存储于 dst ,计算公式是:

dst(x + width(dst) / 2,y + height(dst) / 2) = src(A

11x + A

12

y + b

1

,A21x +

A22y + b

2

)

其中 A和 b 均来自映射矩阵(译者注:A, b为几何形变参数) ,映射矩阵为:

其中在非整数坐标的象素点值通过双线性变换得到。当函数需要图像边界外的像素点时,使用重复边界模式(replication border mode)恢复出所需的值。多通道图像的每一个通道都单独计算。

例子:使用 cvGetQuadrangleSubPix 进行图像旋转

#include "cv.h"

#include "highgui.h"

#include "math.h"

int main( int argc, char** argv )

{

IplImage* src;

/* the first command line parameter must be image file name */

if( argc==2 && (src = cvLoadImage(argv[1], -1))!=0)

{

IplImage* dst = cvCloneImage( src );

int delta = 1;

int angle = 0;

cvNamedWindow( "src", 1 );

cvShowImage( "src", src );

for(;;)

{

float m[6];

double factor = (cos(angle*CV_PI/180.) + 1.1)*3;

CvMat M = cvMat( 2, 3, CV_32F, m );

int w = src->width;

int h = src->height;

m[0] = (float)(factor*cos(-angle*2*CV_PI/180.));

m[1] = (float)(factor*sin(-angle*2*CV_PI/180.));

m[2] = w*0.5f;

m[3] = -m[1];

m[4] = m[0];

m[5] = h*0.5f;

cvGetQuadrangleSubPix( src, dst, &M, 1, cvScalarAll(0));

cvNamedWindow( "dst", 1 );

cvShowImage( "dst", dst );

if( cvWaitKey(5) == 27 )

break;

angle = (angle + delta) % 360;

}

}

return 0;

}

Resize

图像大小变换

void cvResize( const CvArr* src, CvArr* dst, int

interpolation=CV_INTER_LINEAR );

src

输入图像.

dst

输出图像.

interpolation

插值方法:

?CV_INTER_NN - 最近邻插值,

?CV_INTER_LINEAR - 双线性插值 (缺省使用)

?CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..

?CV_INTER_CUBIC - 立方插值.

函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小。若设定 ROI,函数将按常规支持 ROI.

WarpAffine

对图像做仿射变换

void cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) );

src

输入图像.

dst

输出图像.

map_matrix

2×3 变换矩阵

flags

插值方法和以下开关选项的组合:

?CV_WARP_FILL_OUTLIERS - 填充所有输出图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval.

?CV_WARP_INVERSE_MAP - 指定 map_matrix 是输出图像到输入图像的反变换,因此可以直接用来做象素插值。否则, 函数从

map_matrix 得到反变换。

fillval

用来填充边界外面的值

函数 cvWarpAffine 利用下面指定的矩阵变换输入图像:

?如果没有指定 CV_WARP_INVERSE_MAP ,

?否则,

函数与 cvGetQuadrangleSubPix 类似,但是不完全相同。 cvWarpAffine 要求输入和输出图像具有同样的数据类型,有更大的资源开销(因此对小图像不太合

适)而且输出图像的部分可以保留不变。而 cvGetQuadrangleSubPix 可以精确地从8位图像中提取四边形到浮点数缓存区中,具有比较小的系统开销,而且总是全部改变输出图像的内容。

要变换稀疏矩阵,使用 cxcore 中的函数 cvTransform 。GetAffineTransform

由三对点计算仿射变换

CvMat* cvGetAffineTransform( const CvPoint2D32f* src,

const CvPoint2D32f* dst, CvMat* map_matrix );

src

输入图像的三角形顶点坐标。

dst

输出图像的相应的三角形顶点坐标。

map_matrix

指向2×3输出矩阵的指针。

函数cvGetAffineTransform计算满足以下关系的仿射变换矩阵:

这里,dst(i) = (x'i,y'i),src(i) = (x i,y i),i = 0..2.

2DRotationMatrix

计算二维旋转的仿射变换矩阵

CvMat* cv2DRotationMatrix( CvPoint2D32f center, double angle,

double scale, CvMat* map_matrix );

center

输入图像的旋转中心坐标

angle

旋转角度(度)。正值表示逆时针旋转(坐标原点假设在左上角). scale

各项同性的尺度因子

map_matrix

输出2×3 矩阵的指针

函数 cv2DRotationMatrix 计算矩阵:

[ αβ | (1-α)*center.x - β*center.y ]

[ -βα | β*center.x + (1-α)*center.y ]

where α=scale*cos(angle), β=scale*sin(angle)

该变换并不改变原始旋转中心点的坐标,如果这不是操作目的,则可以通过调整平移量改变其坐标(译者注:通过简单的推导可知,仿射变换的实现是首先将旋转中心置为坐标原点,再进行旋转和尺度变换,最后重新将坐标原点设定为输入图像的左上角,这里的平移量是center.x, center.y).

WarpPerspective

对图像进行透视变换

void cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix,

int

flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,

CvScalar fillval=cvScalarAll(0) );

src

输入图像.

dst

输出图像.

map_matrix

3×3 变换矩阵

flags

插值方法和以下开关选项的组合:

?CV_WARP_FILL_OUTLIERS - 填充所有缩小图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval.

?CV_WARP_INVERSE_MAP - 指定 matrix 是输出图像到输入图像的反变换,因此可以直接用来做象素插值。否则, 函数从 map_matrix

得到反变换。

fillval

用来填充边界外面的值

函数 cvWarpPerspective 利用下面指定矩阵变换输入图像:

?如果没有指定 CV_WARP_INVERSE_MAP ,

,

?否则,

要变换稀疏矩阵,使用 cxcore 中的函数 cvTransform 。WarpPerspectiveQMatrix

用4个对应点计算透视变换矩阵

CvMat* cvWarpPerspectiveQMatrix( const CvPoint2D32f* src,

const CvPoint2D32f* dst,

CvMat* map_matrix );

src

输入图像的四边形的4个点坐标

dst

输出图像的对应四边形的4个点坐标

map_matrix

输出的3×3 矩阵

函数 cvWarpPerspectiveQMatrix 计算透视变换矩阵,使得:

(tix'i,tiy'i,ti)T=ma trix?(xi,yi,1)T

其中 dst(i)=(x'i,y'i), src(i)=(xi,yi), i=0..3. GetPerspectiveTransform

由四对点计算透射变换

CvMat* cvGetPerspectiveTransform( const CvPoint2D32f* src, const CvPoint2D32f* dst,

CvMat* map_matrix );

#define cvWarpPerspectiveQMatrix cvGetPerspectiveTransform

src

输入图像的四边形顶点坐标。

dst

输出图像的相应的四边形顶点坐标。

map_matrix

指向3×3输出矩阵的指针。

函数cvGetPerspectiveTransform计算满足以下关系的透射变换矩阵:

这里,dst(i) = (x'i,y'i),src(i) = (x i,y i),i = 0..3.

Remap

对图像进行普通几何变换

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

const CvArr* mapx, const CvArr* mapy,

int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,

CvScalar fillval=cvScalarAll(0) );

src

输入图像.

dst

输出图像.

mapx

x坐标的映射 (32fC1 image).

mapy

y坐标的映射 (32fC1 image).

flags

插值方法和以下开关选项的组合:

CV_WARP_FILL_OUTLIERS - 填充边界外的像素. 如果输出图像的部分象素落在变换后的边界外,那么它们的值设定为 fillval。

fillval

用来填充边界外面的值.

函数 cvRemap 利用下面指定的矩阵变换输入图像:

dst(x,y)<-src(mapx(x,y),mapy(x,y))

与其它几何变换类似,可以使用一些插值方法(由用户指定,译者注:同cvResize)来计算非整数坐标的像素值。

LogPolar

把图像映射到极指数空间

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

CvPoint2D32f center, double M,

int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); src

输入图像。

dst

输出图像。

center

变换的中心,输出图像在这里最精确。

M

幅度的尺度参数,见下面公式。

flags

插值方法和以下选择标志的结合

?CV_WARP_FILL_OUTLIERS -填充输出图像所有像素,如果这些点有和外点对应的,则置零。

?CV_WARP_INVERSE_MAP - 表示矩阵由输出图像到输入图像的逆变换,并且因此可以直接用于像素插值。否则,函数从map_matrix中寻

找逆变换。

fillval

用于填充外点的值。

函数cvLogPolar用以下变换变换输入图像:

正变换 (CV_WARP_INVERSE_MAP 未置位):

dst(phi,rho)<-src(x,y)

逆变换 (CV_WARP_INVERSE_MAP 置位):

dst(x,y)<-src(phi,rho),

这里,

rho=M*log(sqrt(x2+y2))

phi=atan(y/x)

此函数模仿人类视网膜中央凹视力,并且对于目标跟踪等可用于快速尺度和旋转变换不变模板匹配。

Example. Log-polar transformation.

cvPutText opencv中汉字的输出

cvPutText opencv中汉字的输出 OPENCV 不支持汉字输出,但可以修改其代码,支持汉字。字符输出在nitFont、cvPutText、cvGetSize三个函数中,文件在cxcore\src\cxdrawing.cpp 函数介绍: void cvlnitFont(CvFont*font,int font_face,double hscale,double vscale,double shear,int thickness,int line_type); /*font表示被初始化的字体结构体。font_face字体名称标识符,目前仅支持CV_FONT_HERSHEY_SIMPLEX等少数几种字体。hscale表示字体宽度的放大系数,例如0.5f表示宽度为原来的一半,shear字体豹裁瘦的斜率,1表示字体倾斜45度。thickness表示字体笔划的粗细程度。line_type表示字体笔划的类型,具体参见cvLine。*/ void cvPutText(CvArr *img,char+text,CvPoint org,CvFont *font,CvScalar color); /*img表示图像。这里要严格的ASCII字符,不能接受像GB2312等双字节编码。org表示第1个字符左下角的坐标。font表示字体结构体。color表示文本的字体颜色。*/ 字符编码:ASCII(一个字节),GB2313(两个字节),Unicode(两个字节).unicode兼容ASCII,不兼容GB,需要ANSI-C语言来转换.

思想如下: 1,解析汉字的编码;2,根据汉字编码装载汉字的形状;3,输出汉字的形状。 1,从char --> wchar_t 2,采用TrueType 字库。利用开源的FreeType库来处理字库。具体如下: 用FreeType的API提取一个字符的过程如下:{ FT_Library m_library;//字库 FT_Face m face;//字体 //打开字库文件,创建一个字体 FT_Init_FreeType(&m_library); FT_New_Face(m_library,"TrueType.ttf,0,&m_face); ∥根据字符的编码得到字符的索引位置 //根据字符在字库中索引得到字库轮廓 //根据字符的轮廓渲染字符的二值位图 FT_UInt glyph_index=FT_Get_Char_Index(m_face,'中'); FT_Load_Glyph(m_face,glyph_index,FT_LOAD_DEFAULT); FT_RenderGlyph(m_face->glyph,FT_RENDER_MODE_MONO); //释放FreeType库管理的资源 FT_Done_Face(m_face); FT_Done_FreeType(m_library);

opencv for c# 开发文档

OpenCV for Unity 1.2.3 iOS & Android support Win & Mac Standalone support(if Unity4,Pro only) Support for preview in the Editor(if Unity4,Pro only) Work with Unity Free & Pro System Requirements Build Win Standalone & Preview Editor : Windows7 or later Build Mac Standalone & Preview Editor : OSX 10.8 or later OpenCV for Unity is an Assets Plugin for using OpenCV from within Unity. ●Since this package is a clone of OpenCV Java, you can use as it is all the API Reference OpenCV Java 2.4.11 (link). (“org.opencv.android” and “SURF and SIFT of org.opencv.features2d” are excluded) ●You can image processing in real-time by using the WebCamTexture capabilities of Unity. (real-time face detection works smoothly in iPhone 5) ●Provides a method to interconversion of Unity's Texture2D and OpenCV's Mat. ●Includes many classes from OpenCVForUnity, and implements IDisposable. You can manage the resources with the "using" statement. Please download Demo Application for Android and watch Setup Tutorial Video(Unity4 Unity5). API Reference OpenCV for Unity SampleCode using OpenCV for Unity is available. ●MarkerBased AR Sample ●FaceTracker Sample ●Voforia with OpenCV for Unity Sample ●Kinect with OpenCV for Unity Sample

C# OpenCV 初体验

[C#] OpenCV 初體驗 2011/05/17 在Visual Studio 2010 使用OpenCV 對於WebCam 有問題的話,請參考以下連結 https://www.360docs.net/doc/bd12917621.html,/Forums/zh-TW/230/thread/d1647ae6-7f61-453e-818a-2fa4f52592bb 一、簡介 以前研究所的時候,有使用https://www.360docs.net/doc/bd12917621.html, 配合OpenCV 做影像處理,這東西相當讚,可以省去不少開發時間,今天嘗試看看如何在Visual C# 2008 上使用OpenCV。 以下引用OpenCV 中文網站的介紹 1. 什麼是OpenCV OpenCV是Intel?開源電腦視覺庫。它由一系列C 函數和少量C++ 類構成,實現了圖像處理和電腦視覺方面的很多通用演算法。 2. OpenCV 重要特性 OpenCV 擁有包括300 多個C函數的跨平臺的中、高層API。它不依賴於其它的外部庫——儘管也可以使用某些外部庫。 OpenCV 對非商業應用和商業應用都是免費(FREE)的。(細節參考license)。 OpenCV 為Intel? Integrated Performance Primitives (IPP) 提供了透明介面。這意味著如果有為特定處理器優化的的IPP 庫,OpenCV 將在運行時自動載入這些庫。更多關於IPP 的信息請參考:https://www.360docs.net/doc/bd12917621.html,/software/products/ipp/index.htm 3. 體驗OpenCV 的魅力 看了以上對OpenCV的介紹,還是不知道OpenCV在做什麼的話,可以先看這段影片,影片的成果是透過OpenCV 所撰寫而成。 二、方法 1. 下載與安裝OpenCV 要使用OpenCV,首先必須要下載並且安裝,點這裡下載OpenCV_1.1pre1a.exe,下載後執行安裝,安裝過程幾乎都是點選下一步,在此需記住安裝目錄為何,預設為C:\Program Files\OpenCV。

opencv配置

VS2010 + OpenCV2.3配置 ; 在VS2010下安装配置OpenCV2.3 ; 全程截图,绝对能配置好,不能的留言! 操作系统:Windows 7 x86 中文旗舰版; 编译环境:Visual Studio 2010 中文旗舰版; OpenCV版本:OpenCV-2.3.0-win、OpenCV-2.3.1-win; 备注: a、不需要Cmake编译!! b、如果是最新的2.3.1版本,则将下面第5步中的(5)和(6)中的名为230的lib 修改成231即可,否则会出现找不到lib的情况。 c、不分x86和x64版本,一律按照这个方案配置就可以使用。 d、C#开发环境下的配置方法: https://www.360docs.net/doc/bd12917621.html,/mvp_xuan/blog/item/7e6f6d8c4d34be09b31bb aa9.html?timeStamp=1316746687080 e、第5步属于“项目属性配置”,意思是:“每次新建或新打开一个项目,都需要重新配置”。1-4步是系统配置,一次性工程。 1、下载OpenCV(必须要superpack.exe) https://www.360docs.net/doc/bd12917621.html,/download/OpenCV-2.3.0-win-superpack.exe 2、安装 解压到D盘根目录下。(位置随便,不过下面的path需要根据实际情况自行修改了。) 3、设置系统环境变量 在用户变量处,新建PATH和OPENCV两个项: ———————————————————— PATH (只需添加下面中的一行,根据系统情况自行选择) D:\OpenCV2.3\build\x86\vc10\bin ———————————————————— OPENCV D:\OpenCV2.3\build ————————————————————

OpenCV中文翻译教程

OPENCV2基础(补充材料) OpenCV_tutorials翻译资料整理而来 翻译材料出处: https://www.360docs.net/doc/bd12917621.html,/opencvdoc/2.3.2/html/doc/tutorials/tutorial s.html [2014/10]

目录 一、Mat - 基本图像容器 (2) 二、OpenCV如何扫描图像、利用查找表和计时 (9) 三、矩阵的掩码操作 (19) 四、使用OpenCV对两幅图像求和(求混合(blending)) (24) 五、改变图像的对比度和亮度 (27) 六、图像平滑处理 (33) 七、腐蚀与膨胀(Eroding and Dilating) (40) 八、实现自己的线性滤波器 (49) 九、给图像添加边界 (53) 十、Sobel 导数 (59) 十一、霍夫线变换 (65) 十二、直方图均衡化 (72) 十三、仿射变换 (77) 十四、Remapping 重映射 (85)

一、 Mat - 基本图像容器 目的 从真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值。 比如上面的图像,在标出的镜子区域中你见到的只是一个矩阵,该矩阵包含了所有像素点的强度值。如何获取并存储这些像素值由我们的需求而定,最终在计算机世界里所有图像都可以简化为数值矩以及矩阵信息。作为一个计算机视觉库,OpenCV其主要目的就是通过处理和操作这些信息,来获取更高级的信息。因此,OpenCV如何存储并操作图像是你首先要学习的。 Mat 在2001年刚刚出现的时候,OpenCV基于C语言接口而建。为了在内存(memory)中存放图像,当时采用名为IplImage的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材料。但这种方法必须接受C语言所有的不足,这其中最大的不足要数手动内存管理,其依据是用户要为开辟和销毁内存负责。虽然对于小型的程序来说手动管理内存不是问题,但一旦代码开始变得越来越庞大,你需要越来越多地纠缠于这个问题,而不是着力解决你的开发目标。 幸运的是,C++出现了,并且带来类的概念,这给用户带来另外一个选择:自动的内存管理(不严谨地说)。这是一个好消息,如果C++完全兼容C的话,这个变化不会带来兼容性问题。为此,OpenCV在2.0版本中引入了一个新的C++接口,利用自动内存管理给出了解决问题的新方法。使用这个方法,你不需要纠结在管理内存上,而且你的代码会变得简洁(少写多得)。但C++接口唯一的不足是当前许多嵌入式开发系统只支持C语言。所以,当目标不是这种开发平台时,没有必要使用旧方法(除非你是自找麻烦的受虐狂码农)。

win7+64(32)位系统+彻底Opencv安装+vs2012中文版

这两天在win7+64(32系统也只是在某些地方有区别,我会说明)位系统的vs2012中文版上永久配置了Opencv,发现装的时候遇到了好多问题,所以想总结一下。 一、安装OpenCV2.4.9 首先下载相应的软件(win7+64位系统和vs2012中文版的安装这里就不做过多的介绍了): 下载 OpenCV2.4.9: https://www.360docs.net/doc/bd12917621.html,/downloads.html (选择windows 系统的,不区分x86和x64) 我安装的目录是E:\opencv-2.4.9,大概有几个G,当然你也可以安装其他的版本,我没有试过,整体思路是一样的。 大概等几分钟就安装好了。 二、配置环境变量 点击计算机—>右击属性—>左侧高级系统设置—>高级—>环境变量 环境变量上面是用户变量,下册为系统变量。 1. 在用户变量下侧点击新建2项: 变量名:OPENCV,变量值:E:\opencv-2.4.9\opencv\build;如下图 变量名:PATH, 变量值:E:\opencv-2.4.9\opencv\build\x64\vc11\bin; E:\opencv-2.4.9\opencv\build\x86\vc11\bin 注意之间用分号分开,如下图。

2.在系统变量中找到path,必须注意,不要把系统变量path里面的值删除,而是向里面加入,以分号隔开,在里面加入以下路径 对于64位系统加入: E:\opencv-2.4.9\opencv\build\x64\vc11\bin; E:\opencv-2.4.9\opencv\build\x86\vc11\bin 对于32位系统加入: E:\opencv-2.4.9\opencv\build\x86\vc11\bin 弄完环境变量后,最好重启以下系统。当然在cmd中有些方法查看变量是否奏效,这里不再啰嗦,还有注意虽然我们是vs2012但是也要选vc11\bin这样的路径,而不是vc12\bin. 三、vs2012工程的配置 有些文档说每次新建工程都要重新配置,或者以一些啰嗦的方法配置如https://www.360docs.net/doc/bd12917621.html,/lysc_forever/article/details/24272595 里面说的方法,其实不用,我们完全一次性配置好而且简单,此方法是在https://www.360docs.net/doc/bd12917621.html,/poem_qianmo/article/details/19809337 里面学到的。 点开vs2012—>文件—>新建—>项目—>Win32控制台应用程序—>确定

opencv中的图像坐标和行列的关系

OpenCV中文站中有一篇关于OpenCV基础操作的文章《OpenCV 编程简介(矩阵/图像/视频的基本读写操作)入门必读》,上面对OpenCV的一些入门操作进行了详细的介绍。我也是看了这篇文章后才开始了OpenCV的编程。但是最近发现了一个理解上的小失误,导致一个问题困扰了很长时间。现在问题解决了,就把思考的过程写在这跟大家分享一下。 该文章其中有一部分是关于如何操作图像像素值的介绍: 基于指针的直接访问:(简单高效) IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); int height = img->height; int width = img->width; int step = img->widthStep/sizeof(uchar); uchar* data = (uchar *)img->imageData; data[i*step+j] = 111; 对像素值的访问,作者用了data[i*step+j]这样的格式,当时没怎么仔细想,就认为这是图像中坐标为(i, j)像素的值,其实并不是这样的。 首先,来看一下IplImage的结构,其中像素值存放在char *imageData指针做指向的区域,OpenCV官方文档中将其解释为"A pointer to the aligned image data",就是指向排列好的图像数据的指针。但是指针取出来,是一个一维数组data[i*step+j],是怎么体现出“排列好的”这个性质的呢?OpenCV用了一个辅助的变量来实现。就是IplImage的widthStep,它表示图像一行有多少个字节。用这个值除以一个像素所占的字节数,就可以得到一行有多少个像素。data[i*step+j]就是第i行第j个像素的像素值(i和j从0开始,这个应该不用我说吧)。 但是,如果用(i, j)来表示坐标的话,正好反了。因为行号是在列的方向递增的。比如说第5行,那么它的纵坐标应该是5-1。第五行的第几个,这个几才代表横坐标。 明白了这点就好办了,如果想用(i, j)同时来表示坐标和数组中的点,那么应该用data[i+j*step]。i在图像宽度范围内递增,j在图像高度范围内递增。如果图像宽和高非别为w和h,那么对像素的遍历可以用下面的循环搞定: for(int j = 0; j < h; j++) { for(int i = 0; i < w; i++) { printf("(%d, %d)=%d\t", i, j, data[i+j*step]); } } 以后就定义成data[i+j*step],方便后面的操作。一般情况下还是习惯i在前、j在后的格式。 (坐标是从0开始的,并且是相对图像原点的位置。图像原点或者是左上角(img->origin=IPL_ORIGIN_TL) 或者是左下角 (img->origin=IPL_ORIGIN_BL) )?假设有 8-bit 1-通道的图像 I (IplImage* img): I(x,y) ~ ((uchar*)(img->imageData + img->widthStep*y))[x] ?假设有 8-bit 3-通道的图像 I (IplImage* img): I(x,y)blue ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3] I(x,y)green ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+1] I(x,y)red ~ ((uchar*)(img->imageData + img->widthStep*y))[x*3+2] 例如,给点 (100,100) 的亮度增加 30 ,那么可以这样做:

OpenCv参考手册-CvAux中文参考手册

CvAux中文参考手册Wikipedia,自由的百科全书 目录 ? 1 立体匹配 o 1.1 FindStereoCorrespondence ? 2 View Morphing Functions o 2.1 MakeScanlines o 2.2 PreWarpImage o 2.3 FindRuns o 2.4 DynamicCorrespondMulti o 2.5 MakeAlphaScanlines o 2.6 MorphEpilinesMulti o 2.7 PostWarpImage o 2.8 DeleteMoire ? 3 3D Tracking Functions o 3.1 3dTrackerCalibrateCameras o 3.2 3dTrackerLocateObjects ? 4 Eigen Objects (PCA) Functions o 4.1 CalcCovarMatrixEx o 4.2 CalcEigenObjects o 4.3 CalcDecompCoeff o 4.4 EigenDecomposite o 4.5 EigenProjection ? 5 Embedded Hidden Markov Models Functions o 5.1 CvHMM o 5.2 CvImgObsInfo o 5.3 Create2DHMM o 5.4 Release2DHMM o 5.5 CreateObsInfo o 5.6 ReleaseObsInfo o 5.7 ImgToObs_DCT o 5.8 UniformImgSegm o 5.9 InitMixSegm o 5.10 EstimateHMMStateParams o 5.11 EstimateTransProb o 5.12 EstimateObsProb o 5.13 EViterbi o 5.14 MixSegmL2 [编辑]

OpenCV入门教程

OpenCV 入门教程 作者:于仕琪 shiqi.yu@https://www.360docs.net/doc/bd12917621.html, https://www.360docs.net/doc/bd12917621.html, 2012 年 8 月 版权所有?于仕琪 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

前言 OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。很多初学者希望快速掌握OpenCV 的使用方法,但往往会遇到各种各样的困难。其实仔细分析,造成这些困难的原因有两类:第一类是C/C++编程基础不过关;第二类是不了解算法原理。解决这些困难无非提升编程能力,以及提升理论基础知识。提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就,需要耐下心来认真修炼。 同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。在实践中学习才是最高效的学习方式。本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数 据结构以及用法。 此外,如您发现有错误之处,欢迎来信指正。 于仕琪 深圳大学 插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的 研究生。欲了解详情可以访问深圳大学招生网https://www.360docs.net/doc/bd12917621.html,/或者给我发 email。

目录 第 1 章预备知识 (5) 1.1 编程的流程 (5) 1.2 什么叫编辑 (6) 1.3 什么叫编译 (6) 1.4 什么叫连接 (7) 1.5 什么叫运行 (7) 1.6 Visual C++是什么 (8) 1.7 头文件 (9) 1.8 库文件 (10) 1.9 OpenCV 是什么 (11) 1.10 什么是命令行参数 (12) 1.11 常见编译错误 (13) 1.11.1 找不到头文件 (13) 1.11.2 拼写错误 (14) 1.12 常见链接错误 (15) 1.13 运行时错误 (17) 第 2 章OpenCV 介绍 (19) 2.1 OpenCV 的来源 (19) 2.2 OpenCV 的协议 (19) 第 3 章图像的基本操作 (21) 3.1 图像的表示 (21) 3.2 Mat 类 (23) 3.3 创建 Mat 对象 (24) 3.3.1 构造函数方法 (24) 3.3.2 create()函数创建对象 (25) 3.3.3 Matlab 风格的创建对象方法 (26)

opencv安装

1、OpenCV 的下载地址:https://www.360docs.net/doc/bd12917621.html,/projects/opencvlibrary/ 2、有用的网址: (1) Visit OpenCV Wiki-pages at https://www.360docs.net/doc/bd12917621.html,/wiki/ and look for the information there (and/or add it when you have found a solution) (2) Search through OpenCV archives at https://www.360docs.net/doc/bd12917621.html, (https://www.360docs.net/doc/bd12917621.html,/group/OpenCV/) (3) Join OpenCV mailing list at yahoo groups (see FAQs on how to do it) and mail your questions (the mailing list will probably migrate to OpenCV's SourceForge site https://www.360docs.net/doc/bd12917621.html,/projects/opencvlibrary) (4) Look at the OpenCV sample code, read the reference manual ( https://www.360docs.net/doc/bd12917621.html,/documentation/index.html ) (5) OpenCV 中文网站:https://www.360docs.net/doc/bd12917621.html, 一、程序的安装设置 1、OpenCV 安装完毕后,检查 C:\Program Files\OpenCV1.2\bin 是否已经被加入到环境变量PATH,如果没有,请加入。(我的电脑--属性--高级--环境变量—***的用户变量--选中‘Path’变量,点击‘编辑’,在‘变量值’栏的最后加入‘C:\Program Files\OpenCV1.2\bin’)。 加入后需要注销当前Windows用户(或重启)后重新登陆才生效(也可以通过任务管理器终止explorer.exe 进程,然后再重新运行 explorer.exe )。 2、下载安装 Microsoft Visual C++ 2008 Redistributable OpenCV1.2 在 VS2005 环境下编译时,可能出现如下错误(即‘应用程序正常初始化 (0xc0150002失败)’):

OPENCV训练图像集中文版

级联分类器训练 引言 级联分类器的工作主要包括两个阶段:训练和检测。检测阶段被描述在一个常规的OpenCV 文件的objdetect模块的文档里。文档介绍了级联分类器的一些基本信息。目前的指南描述了如何训练级联分类器:一个训练数据集和运行训练应用程序的准备。 重要的笔记 在OpenCV里有两个应用程序可以用来训练级联分类器:opencv_haartraining和opencv_traincascade。opencv_traincascade是一个较新的版本,用C++按照OpenCV2.x API 的标准编写。但这两个应用程序之间的主要区别是,opencv_traincascade同时支持Haar [Viola2001]和LBP[Liao2007](局部二值模式)的特征。相比于Haar特征,LBP特征是整数,所以用LBP训练和检测比用Haar特征快好几倍。至于LBP和Haar的检测质量取决于训练:首先是训练数据集的品质还有训练参数。训练一个和基于Haar的分类有几乎相同的质量的基于LBP的分类是有可能的。 opencv_traincascade和opencv_haartraining以不同的文件格式存储训练好的分类器。值得注意的是,较新的级联检测接口(见objdetect模块的级联分类器类)两种格式都支持。opencv_traincascade可以用旧格式保存(输出)训练好的级联。但opencv_traincascade和opencv_haartraining无法在中断后以另一种格式加载(输入)一个分类器来进一步训练。 注意,opencv_traincascade应用程序可以使用TBB实现多线程。在多核模式下使用,OpenCV 必须要用TBB来构建。 并且这有一些和训练相关的辅助工具。 ·opencv_createsamples是用来准备正训练数据集和测试样本集的。 opencv_createsamples产生一个opencv_haartraining和opencv_traincascade都支持的格式的正样本数据集。输出的是一个以*.VEC为后缀的文件,它是一种包含图像的二进制格式。 ·opencv_performance可用于评估分类器的质量,但是只能评估opencv_haartraining的训练。它需要一个图像标记的集合,运行分类器并且报告性能,即找到的对象的数量,没有对象的数量,错误警报的数量等信息。 因为opencv_haartraining是一个过时的应用,只对opencv_traincascade进行进一步的讲解。为opencv_traincascade准备训练数据时opencv_createsamples工具是必需的,所以它也将被详述。 opencv_createsamples工具 一个opencv_createsamples工具提供了数据集的生成功能,写和读,用数据集这个术语作为训练集和测试集的统称。 训练数据准备 为了训练我们需要一组样本。有两种类型的样品:正和负。负样本对应于非目标图像。正样本对应于包含了被测物体的图像。集负样本必须手动创建,而一组正样本由opencv_createsamples工具创建。

opencv中文手册

目录 ? 1 梯度、边缘和角点 o 1.1 Sobel o 1.2 Laplace o 1.3 Canny o 1.4 PreCornerDetect o 1.5 CornerEigenValsAndVecs o 1.6 CornerMinEigenVal o 1.7 CornerHarris o 1.8 FindCornerSubPix o 1.9 GoodFeaturesToTrack ? 2 采样、插值和几何变换 o 2.1 InitLineIterator o 2.2 SampleLine o 2.3 GetRectSubPix o 2.4 GetQuadrangleSubPix o 2.5 Resize o 2.6 WarpAffine o 2.7 GetAffineTransform o 2.8 2DRotationMatrix o 2.9 WarpPerspective o 2.10 WarpPerspectiveQMatrix o 2.11 GetPerspectiveTransform o 2.12 Remap o 2.13 LogPolar ? 3 形态学操作 o 3.1 CreateStructuringElementEx o 3.2 ReleaseStructuringElement o 3.3 Erode o 3.4 Dilate o 3.5 MorphologyEx ? 4 滤波器与色彩空间变换 o 4.1 Smooth o 4.2 Filter2D o 4.3 CopyMakeBorder o 4.4 Integral o 4.5 CvtColor o 4.6 Threshold o 4.7 AdaptiveThreshold ? 5 金字塔及其应用 o 5.1 PyrDown o 5.2 PyrUp

OpenCV概述

OpenCV概述 数字图像处理技术和计算机视觉技术的迅速发展及其庞大的应用市场,迫切需要像计算机图形学的OpenGL和DirectX那样的标准API。近年来,Intel推出了高性能的开源计算机视觉库OpenCV(Open Source Computer Vision Library),应用OpenCV可以大大简化图像处理与计算机视觉程序设计工作,提高软件开发效率。 OpenCV包含了几百个图像处理和计算机视觉方面的C语言函数和一些C++类,实现了许多流行的图像处理和计算机视觉算法。OpenCV的目标是形成一个易于使用的图像处理和计算机视觉软件开发包,来解决该领域的一些共性问题。 OpenCV具有跨平台、免费、速度快、易于使用的特点,提供了透明的IPP(Integrated Performance Primitives)接口,能够基于Intel处理器进行性能优化。OpenCV资源非常丰富,其源码(包括参考手册)可以从:https://www.360docs.net/doc/bd12917621.html,/projects/opencvlibrary/免费下载,程序设计中遇到的问题可求助于OpenCV讨论组(https://www.360docs.net/doc/bd12917621.html,/group/OpenCV/)和邮件列表。另外,从https://www.360docs.net/doc/bd12917621.html,/可以获取相关的中文信息。学习OpenCV的主要方法是阅读OpenCV参考手册,查看例程,以及查看邮件列表。 现在出版的中文书: 《学习OpenCV(中文版)》 《OpenCV中文教程》 《Learning OpenCV(影印版)》 一.OpenCV类库简介 OpenCV类库主要由CxCORE、CV、CVAUX、HighGUI、ML、CVCAM等库组成,其体系结构如图1所示: 图1 OpenCV类库体系结构 1.CxCORE库是OpenCV的核心,涉及基本数据结构、矩阵操作、动态数据结构等。 2.CV库包括图像处理的常用算法(如图像滤波、图像分割、边缘检测、数学形态学 等)、结构分析(如轮廓处理、多边形逼近、Delaunay三角划分等)、模式识别、摄 像机标定、三维重建、运动分析与目标跟踪等。 3.CVAUX则是一个辅助库,包含一些试验性函数,如立体视觉匹配、隐马尔科夫场 等。 4.HighGUI库包含一些简单的用户界面函数(如创建滑动条、窗口等)、图像文件读/ 写函数以及视频读/写函数。 5.ML是一个机器学习库,包含模式分类的一些C++类和函数,如贝叶斯分类器、支 持向量机、决策树、神经网络等。 6.CVCAM是有关摄像机使用的库。

OPENCV的配置过程 VS2010环境下 过程绝对简单

VS2010环境下OpenCV2.3.1的编译过程 备注: a、不需要Cmake编译!! b、如果是最新的2.3.1版本,则将下面第5步中的(5)和(6)中的名为230的lib修改成231即可,否则会出现找不到lib的情况。 c、不分x86和x64版本,一律按照这个方案配置就可以使用。 d、操作系统:Windows7x86中文旗舰版; 编译环境:Visual Studio2010中文旗舰版; OpenCV版本:OpenCV-2.3.0-win、OpenCV-2.3.1-win; 1.到https://www.360docs.net/doc/bd12917621.html,/index.php/Download下载OpenCV for Windows(也即OpenCV- 2. 3.1-win-superpack.exe文件)。 2.将OpenCV-2. 3.1-win-superpack.exe解压并放到某个目录下,例如D:\Program Files\OpenCV-2.3.1-win-superpack\opencv(无需运行setup.exe,解压则可)。解压后的目录结构如下图。

3.添加OpenCV的include和lib,步骤如下:在VS新建一个Win32控制台应用程序,以下以工程Opencv为例,然后选择菜单栏视图->属性管理器 这时在VS编辑器右侧出现属性管理器

点开之前建的工程Opencv,会看到Debug|Win32和Release|Win32两个目录 点开Debug|Win32目录,

找到https://www.360docs.net/doc/bd12917621.html,er,双击打开 找到箭头所指的”VC++目录”,打开,在右侧在”包含目录”中加入OpenCV安装目录下的 E:\ProgramFiles\OpenCV-2.3.1-win-superpack\opencv\build\include; E:\ProgramFiles\OpenCV-2.3.1-win-superpack\opencv\build\include\op encv;

编译opencv源代码

Opencv源码编译 For Ubuntu For Android For Windows Version0.1 2013.06.06 目录 1.Ubuntu下编译opencv源代码(For linux&Android) (2) 1.1下载opencv源码 (2) 1.2下载安装Cmake (2) 1.3安装一些ubuntu下必要的库文件: (2) 1.4使用Cmake进行配置: (3) 1.5编译opencv生成linux下的opencv库文件 (3) 1.6测试linux下Opencv例程: (4) 1.7Opencv For Android的编译 (4) 1.7.1安装ndk: (4) 1.7.2安装Android SDK (5) 1.7.4开始编译opencv中关于android相关的源码 (5) 2.Ubuntu下codeblocks Opencv开发环境配置 (7) 2.1下载安装codeblocks (7) 2.2打开cldeblocks建立一个摄像头的测试程序: (8) 2.3配置工程的头文件和链接库 (8) 3.Windows7+codeblocks Opencv开发环境搭建 (11) 3.1下载opencv2.2 (11) 3.5打开CMake (12) 3.6环境变量的设置 (12) 3.7在CMake中点击configure (14) 3.8编译oepncv源码 (15) 3.8.1先进入E盘 (15) 3.8.2进入目录OpenCV-2.2.0-build (15) 3.8.3编译opencv源码 (16) 3.8.4安装opencv库文件 (16) 3.9使用codeblocks建立openv工程 (17) 3.10测试代码 (18) 3.11给工程文件添加opencv相关路径 (19) 3.12编译工程文件 (22) 附其他参考资料备忘 (23)

学习opencv 中文版 勘误

《学习OpenCV(中文版)》勘误 来源:OpenCV开源计算机视觉库的日志 XIV页 倒数第二段,倒数第四行“正式在他们组织的一次。。。”应为“正是在他们组织的一次。。。”(by Joseph)ps:我不小心把38 页的那个删了。。。版主改回来吧 26页 函数void example2_4(IplImage *image)后少了一个{ 29页 例2-6 第9行,cvCreateImage(cvSize(cvGetSize(in),IPL_DEPTH_8U,1); 应为cvCreateIm age(cvGetSize(in),IPL_DEPTH_8U,1); (by michaellee@OpenCV China) 36页 表3-1下面第三行:它被传递给。。。多了一个给字。(by wxf198861) 39页 正文第二段最后一句话:当这个矩阵不再需要时,应该是:当矩阵不再需要时。前者容易让人误会成cvCloneMat创建的新矩阵。(by mayitbe) 不小心把38页删掉了!真的不好意思!麻烦版主改回来。 42页 例3-5下面第一段第一行第一词:遗憾的憾写错了。。。(by wxf198861) 43页 倒数第5行:“cvGet*D中有四个函数返回的是整型的”,应该为:“cvGet*D中有四个函数返回的是double型的”。(by FlyZhy) 46页

第6行开头:“...指针解引用的时候,”应改为:“...指针被引用的时候,”(xmchenzb) 49页 第3行:"nchannals"应该为"nChannels" (by deltat) 50页 第4行"冗于"应该为"冗馀" (by deltat) 51页 16行"重要度别" 应是"重要区别" (chenxinqiu50) 51页 18行“我们已经知道是种类型的” 改为“我们已经知道这种类型的” (loop.k) 51页 21行“必须对偏移并进行调整”,“并”字应去掉(lcykk) 52页 10行“用imageROI来增加某范围的像素”有歧义,应该为“用imageROI来增加某范围的像素值” (lcykk) 52页 例3-12中: cvSetImage ROI(src, cvRect(x,y,width,height)); 应为 cvSetImageROI(src, cvRect(x,y,width,height)); (by user:duanlin) 54页 表3-3 缺60页cvAnd, cvAnds 缺85页CVScale(chenxinqiu50) 英文原书中的表格中也缺少,我已经提交勘误到英文原书。Shiqi yu 14:08 2009年12月2 5日(CST)

OpenCV 编程简介教程(中文版),Image Processing, C

Open Source Computer Vision Library intro.html#SECTION00040000000000000000 https://www.360docs.net/doc/bd12917621.html,/chenyusiyuan/archive/2010/01/26/5259060.aspx

2.2 2、输入处理 2.2.1 (1)处理鼠标事件: 2.2.2 (2)处理键盘事件: 2.2.3 (3)处理滑动条事件: 3 三、OpenCV的基本数据结构 3.1 1、图像数据结构 3.1.1 (1) IPL 图像: 3.2 2、矩阵与向量 3.2.1 (1)矩阵: 3.2.2 (2)一般矩阵: 3.2.3 (3)标量: 3.3 3、其它结构类型 3.3.1 (1)点: 3.3.2 (2)矩形框大小(以像素为精度): 3.3.3 (3)矩形框的偏置和大小: 4 四、图像处理 4.1 1、图像的内存分配与释放 4.1.1 (1)分配内存给一幅新图像: 4.1.2 (2)释放图像: 4.1.3 (3)复制图像: 4.1.4 (4)设置/获取感兴趣区域ROI: 4.1.5 (5)设置/获取感兴趣通道COI: 4.2 2、图像读写 4.2.1 (1)从文件中读入图像: 4.2.2 (2)保存图像: 4.3 3、访问图像像素 4.3.1 (1)假设你要访问第k通道、第i行、第j列的像素。 4.3.2 (2)间接访问: (通用,但效率低,可访问任意格式的图像) 4.3.3 (3)直接访问: (效率高,但容易出错) 4.3.4 (4)基于指针的直接访问: (简单高效) 4.3.5 (5)基于 c++ wrapper 的直接访问: (更简单高效) 4.4 4、图像转换 4.4.1 (1)字节型图像的灰度-彩色转换: 4.4.2 (2)彩色图像->灰度图像: 4.4.3 (3)不同彩色空间之间的转换: 4.5 5、绘图指令 4.5.1 (1)绘制矩形: 4.5.2 (2)绘制圆形: 4.5.3 (3)绘制线段: 4.5.4 (4)绘制一组线段: 4.5.5 (5)绘制一组填充颜色的多边形: 4.5.6 (6)文本标注: 5 五、矩阵处理 5.1 1、矩阵的内存分配与释放 5.1.1 (1)总体上: 5.1.2 (2)为新矩阵分配内存: 5.1.3 (3)释放矩阵内存: 5.1.4 (4)复制矩阵: 5.1.5 (5)初始化矩阵: 5.1.6 (6)初始化矩阵为单位矩阵: 5.2 2、访问矩阵元素 5.2.1 (1)假设需要访问一个2D浮点型矩阵的第(i, j)个单元. 5.2.2 (2)间接访问: 5.2.3 (3)直接访问(假设矩阵数据按4字节行对齐): 5.2.4 (4)直接访问(当数据的行对齐可能存在间隙时 possible alignment gaps): 5.2.5 (5)对于初始化后的矩阵进行直接访问: 5.3 3、矩阵/向量运算

相关主题
相关文档
最新文档