ike实习笔记(一)

PART 1 :  opencv函数:

1. cvCopy

/* Copies source array to destination array */

CVAPI(void)  cvCopy( const CvArr* src, CvArr* dst,

                     const CvArr* mask CV_DEFAULT(NULL) );

下面是Opencv官方手册的对cvCopy的说明:

Copy

拷贝一个数组给另一个数组

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

src

输入数组。

dst

输出数组。

mask

操作掩码是8比特单通道的数组,它指定了输出数组中被改变的元素。

函数cvCopy从输入数组中复制选定的成分到输出数组:

如果mask(I)!=0,则dst(I)=src(I)。 (注:即提取mask非零的元素)

如果输入输出数组中的一个是IplImage类型的话,其ROI和COI将被使用。输入输出数组必须是同样的类型、维数和大小。函数也可以用来复制散列数组(这种情况下不支持mask)。

 

2. cvGet2D 

CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );

功能:读取图像arr中下标为(y , x)的像素

 

对于图像中的某一像素点 P(x, y), 在我们正常的坐标系中,x代表其横坐标,y代表其纵坐标,而在opencv的函数 cvGet2D()与cvSet2D() 中,却行不通。cvGet2D() 的函数原型是 : CvScalar  cvGet2D (const CvArr * arr, int idx0, int idx1); 函数返回的是一个CvScalar 容器,其参数中也有两个方向的坐标,但跟我们平常习惯的坐标不一样的是,idx0代表是的行,即高度(hight),对应于我们平常坐标系的y, idx1代表的是列,即宽度(width),对应于我们平常坐标系的x,cvSet2D() 也类似。所以在使用cvSet2D() 与 cvGet2D() 时,千万要注意坐标的顺序。

(本段转自:http://hi.baidu.com/%D1%A9%B0%B5%CF%E3_%BD%E0%BD%E0/blog/item/f3e6aac19250daeb52664f8c.html )

CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );

一般的概念中

         |------------------------------------------------

         |            列数 / width / x

         |

         |

         |  行数 / height / y

         |

         |

         |

 

在cvGet2D 和 cvSet2D 中:

         |------------------------------------------------

         |            idx1 / x

         |

         |

         |  idx0 / y

         |

         |

         |

 

3. cvGetQuadrangleSubPix

/* Retrieves quadrangle from the input array.

    matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b)

                ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels with fractional coordinates)

*/

CVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst,

                                    const CvMat* map_matrix );

 

官方手册说明:

对图像进行仿射变换,c语言有两个函数:

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

 

C: void cvGetQuadrangleSubPix(const CvArr* src, CvArr* dst, const CvMat* mapMatrix)

 

参数:

Src 源图像, dst 目标图像

mapMatrix : 一个2*3的转换矩阵,cvMat格式。

|  M11  M12  M13  |

|  M21  M22  M23  |

 

源图像和目标图像的转换公式:

dst(x,y) = src( M11*x + M12*y + M13,M21*x + M22*y + M23 )

特别的源图像的(M13,M23)点 即为目标图像的(0,0)点。

 4. cvLoadImage

参考百度百科。

函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );

  filename :要被读入的文件的文件名(包括后缀);

  flags :指定读入图像的颜色和深度:

  指定的颜色可以将输入的图片转为3信道(CV_LOAD_IMAGE_COLOR), 单信道 (CV_LOAD_IMAGE_GRAYSCALE), 或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。

  深度指定输入的图像是否转为每个颜色信道每象素8位,(OpenCV的早期版本一样),或者同输入的图像一样保持不变。

  选中CV_LOAD_IMAGE_ANYDEPTH,则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型。

  如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR 将载入3信道图。CV_LOAD_IMAGE_ANYCOLOR和CV_LOAD_IMAGE_UNCHANGED是等值的。但是,CV_LOAD_IMAGE_ANYCOLOR有着可以和CV_LOAD_IMAGE_ANYDEPTH同时使用的优点,所以CV_LOAD_IMAGE_UNCHANGED不再使用了。

  如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。

  函数cvLoadImage从指定文件读入图像,返回读入图像的指针。目前支持如下文件格式

  Windows位图文件 - BMP, DIB;

  JPEG文件 - JPEG, JPG, JPE;

  便携式网络图片- PNG;

  便携式图像格式 - PBM,PGM,PPM;

  Sun rasters - SR,RAS;

  TIFF文件 - TIFF,TIF;

  OpenEXR HDR 图片 - EXR;

  JPEG 2000 图片- jp2。

  cvSaveImage

  保存图像到文件

  int cvSaveImage( const char* filename, const CvArr* image );

  filename

  文件名。

  image

  要保存的图像。

  函数cvSaveImage保存图像到指定文件。图像格式的的选择依赖于filename的扩展名,请参考cvLoadImage。只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。

特别提醒!由于TIFF文件格式比较混乱,难以统一,此函数读取TIFF图片可能会失败。

  cvLoadImage( filename, -1 ); 默认读取图像的原通道数

cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图

cvLoadImage( filename, 1 ); 读取彩色图

 5. CvScalar

CvScalar 类(基本数据结构):

typedef struct CvScalar

 {

  double val[4]

 }

 CvScalar;

一般用于存储一个某一个像素点的值,

S.val[0] 对应B通道

S.val[1] 对应G通道

S.val[2] 对应R通道

S.val[3] 对应Alpha通道

posted @ 2012-10-27 16:00  木lin木  阅读(427)  评论(0编辑  收藏  举报