转载请注明来源:https://www.cnblogs.com/hookjc/

1) IplImage* cvCreateImage( CvSize size, int depth, int channels );

 
  cvCreateImage是openCV中的一个函数。OpenCV是Intel公司支持的开放计算机视觉库。
 

  cvCreateImage:

 

  创建头并分配数据

 

  IplImage* cvCreateImage( CvSize size, int depth, int channels );

 

  参数说明:

 

  size 图像宽、高.

 

  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.通道是交叉存取的,例如通常的彩色图像数据排列是:b0 g0 r0 b1 g1 r1 ... 虽然通常 IPL 图象格式可以存贮非交叉存取的图像,并且一些OpenCV 也能处理他, 但是这个函数只能创建交叉存取图像.

 

  函数 cvCreateImage 创建头并分配数据,这个函数是下列的缩写型式:

 

  header = cvCreateImageHeader(size,depth,channels);

 

  cvCreateData(header);

 

2) IplImage* cvCloneImage( const IplImage* image );

 

  在使用函数之前,不用内存,即不用。该函数会自己开一段内存,然后复制好image里面的数据,然后把这段内存中的数据返回.

 

  例如

 

  IplImage *src;

 

  IplImage *dst;

 

  dst = cvCloneImage(src);

 

  就是直接把src这个图像复制给dst,不用给dst内存空间了,即不用写dst = cvCreateImage(cvGetSize(src),8,3).

3)void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

 

  src

 

  输入图像.

 

  dst

 

  输出图像.

 

  element

 

  用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素

 

  iterations

 

  腐蚀的次数

 

  函数 cvErode 对输入图像使用指定的结构元素进行腐蚀,该结构元素决定每个具有最小值象素点的邻域形状:

 

  dst=erode(src,element): dst(x,y)=min((x',y') in element))src(x+x',y+y')

 

  函数可以是本地操作,不需另外开辟存储空间的意思。腐蚀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

 

  CreateStructuringElementEx 创建结构元素;ReleaseStructuringElement 删除结构元素。

4) void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );

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

 

  void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );

 

  src1

 

  第一个原数组

 

  src2

 

  第二个原数组

 

  dst

 

  输出数组

 

  函数 cvAbsDiff 计算两个数组差的绝对值

 

  dst(I)c = abs(src1(I)c - src2(I)c).

 

  所有数组必须有相同的数据类型相同的大小(或ROI大小)

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

 
  cvThreshold是opencv库中的一个函数
 

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

 

  形式: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 的最大值。

 

  threshold_type:阈值类型 threshold_type=CV_THRESH_BINARY:

 

  如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,des(x,y)=0;

 

  threshold_type=CV_THRESH_BINARY_INV:

 

  如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.

 

  threshold_typ

6)void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );
 

  void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

 

  src

 

  输入图像.

 

  dst

 

  输出图像.

 

  element

 

  结构元素。若为 NULL, 则使用默认的3×3 长方形,锚点在中间的结构元素,进行膨胀运算

 

  iterations

 

  膨胀的次数

 

  函数 cvDilate 对输入图像使用指定的结构元进行膨胀,该结构决定每个具有最大值象素点的邻域形状。

 

  说明:

 

  使用任意结构元素膨胀图像,函数在调用中可以在输入图像上直接进行操作,如采用如下方式调用:cvDilate (img1, img1);

 

  膨胀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

7) CreateStructuringElementEx
 
  cvCreateStructuringElementEx
 

  创建结构元素

 

  IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,

 

  int shape, int* values=NULL );

 

  cols

 

  结构元素的列数目

 

  rows

 

  结构元素的行数目

 

  anchor_x

 

  锚点的相对水平偏移量

 

  anchor_y

 

  锚点的相对垂直偏移量

 

  shape

 

  结构元素的形状,可以是下列值:

 

  CV_SHAPE_RECT, 长方形元素;

 

  CV_SHAPE_CROSS, 交错元素 a cross-shaped element;

 

  CV_SHAPE_ELLIPSE, 椭圆元素;

 

  CV_SHAPE_CUSTOM, 用户自定义元素。这种情况下参数 values 定义了 mask,即象素的那个邻域必须考虑。

 

  values

 

  指向结构元素的指针,它是一个平面数组,表示对元素矩阵逐行扫描。(非零点表示该点属于结构元)。如果指针为空,则表示平面数组中的所有元素都是非零的,即结构元是一个长方形(该参数仅仅当shape参数是 CV_SHAPE_CUSTOM 时才予以考虑)。

 

  函数 cv CreateStructuringElementEx 分配和填充结构 IplConvKernel, 它可作为形态操作中的结构元素。举个例子比较好说清楚

 

  比如一个图

 

  00000

 

  01110

 

  00000

 

  用一个cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

 

  00000

 

  01000

 

  00000

 

  而用一个cvCreateStructuringElementEx( 3,1,1 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

 

  00000

 

  00100

 

  00000

 

  理解:cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵,如果该矩阵里元素全为非零,则将其转化为同样大小只包含一个非零元素,而该非零元素的位置是(0,0)。同理cvCreateStructuringElementEx( 3,1,1 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵,如果该矩阵里元素全为非零,则将其转化为同样大小只包含一个非零元素,而该非零元素的位置是(1,0)

 

  假如用下面这个去腐蚀图像,中心是在右下角1 0 01 1 01 1 1 那么应该怎么表示呢?

 

  理论上应该是int mask[9] = {1, 0, 0, 1, 1, 0, 1, 1, 1}; IplConvKernel* strel = cvCreateStructuringElementEx( 3, 3, 0, 2, CV_SHAPE_CUSTOM, mask );其中0,2可按自己要求设置。

8) cvSetImageROI
 
  功能:
 

  基于给定的矩形设置图像的ROI(感兴趣区域,region of interesting)

 

  格式:

 

  void cvSetImageROI(IplImage* image,CvRect rect);

 

  参数

 

  image 图像头,待处理图像

 

  rect ROI 矩形

 

  说明:

 

  如果ROI为NULL并且参数rect的值不等于整个图像,则ROI被分配。大多数OpenCV函数都支持ROI,并将它作为一个独立图像进行处理,所有像素坐标都是从ROI的左上角或者左下角(基于图像结构)开始计算的。

9) cvResetImageROI
 
  功能: 释放基于给定的矩形设置图像的ROI(感兴趣区域,region of interesting)
 

  格式: void cvResetImageROI(IplImage* image) 

 

  参数: image 图像头,待处理图像

 

  说明: 释放图像image中被设定的感兴趣区域ROI,与cvSetImageROI相对应。

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

  void cvNot(

 

  const CvArr* src,

 

  CvArr* dst

 

  );

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

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

cvGet?D用于获取数组中指定下标的元素值,cvSet?D用于为数组中指定下标的元素赋予值。

以cvGet2D和cvSet2D为例:

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

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

索引值idx0代表数组元素的行下标,idx1代表数组元素的列下标

与OpenCV中图像坐标系相对应,idx0,idx1表示的是图像上指定高度和宽度值位置处所对应的像素值。

因此,在使用时,需要依照如下的方式进行:

1 for (int y = 0; y < height; y++) {
2
3 for (int x = 0; x < width; x++)
4
5 CvScalar cs = cvGet2D(img, y, x);
6
7 cvSet2D(img, y, x, cs);
8
9 }

12) cvMat

 
  OpenCV 中重要的矩阵变换函数,使用方法为cvMat* cvCreateMat ( int rows, int cols, int type ); 这里type可以是任何预定义类型,预定义类型的结构如下:CV_<bit_depth> (S|U|F)C<number_of_channels>。于是,矩阵的元素可以是32位浮点型数据(CV_32FC1),或者是无符号的8位三元组的整型数据(CV_8UC3),或者是无数的其他类型的元素。一个CvMat的元素不一定就是个单一的数字。在矩阵中可以通过单一(简单)的输入来表示多值,这样我们可以在一个三原色图像上描绘多重色彩通道。对于一个包含RGB通道的简单图像,大多数的图像操作将分别应用于每一个通道(除非另有说明)。
13) cvGetSubRect
 
  openCV里面用来创建一定的区域
 

  cvGetSubRect(mat,submat,mat_rect);

 

  用法:

 

  第一个mat指的是源矩阵或者图像

 

  第二个submat用来存储从原矩阵中提取的区域

 

  第三个mat_rect用来指定区域的范围

 

  cvGetSubRect作用是从一个图像中提取出来一部分,比如将一幅图像的一部分提取加到另外一幅图像上,就需要先使用这个函数提取源图像的需要部分。然后利用cvCopy.

14) 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 ); 读取彩色图

 

  例:将读入图像强制转换为灰度图像显示

 

  

 1 #include <highgui.h>
2
3   #include <cv.h>
4
5   int main(int argc, char **argv)
6
7   {
8
9   if (argc != 2)
10
11   return -1;
12
13   /*强制转换为灰度图像*/
14
15   IplImage *img = cvLoadImage(argv[1], 0);
16
17   cvNamedWindow("example");
18
19   cvShowImage("example", img);
20
21   cvWaitKey(0);
22
23   cvReleaseImage(&img);
24
25   cvDestroyWindow("example");
26
27   return 0;
28
29   }

来源:python脚本自动迁移

有关OPenCV的几个库函数的使用的更多相关文章

  1. Python+OpenCV图像处理(三)—— Numpy数组操作图片

    一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...

  2. ubuntu opencv的使用

    博客转载自:https://blog.csdn.net/u012816621/article/details/51732932 CMakeLists.txt # cmake needs this li ...

  3. OpenCV 图象腐蚀形态学操作 全家桶

    图象腐蚀与形态学操作 opencv 1. 通过调用库函数实现图像的腐蚀.膨胀: 2. 通过设置结构元素.元素大小.形态学操作类型实现对图象的形态学操作. 源码(VS2017+OpenCV 4.0) # ...

  4. 移植opencv2.4.9到itop4412开发板

    OpenCV是眼下开源项目中最著名的基于机器视觉方向的图像处理的开发包,眼下已经有被移植到嵌入式Linux环境上. 本文介绍了OpenCV交叉编译的基本步骤. 在opencv交叉编译之前要先进行依赖库 ...

  5. 聚类算法之MeanShift

    机器学习的研究方向主要分为三大类:聚类,分类与回归. MeanShift作为聚类方法之一,在视觉领域有着广泛的应用,尤其是作为深度学习回归后的后处理模块而存在着. 接下来,我们先介绍下基本功能流程,然 ...

  6. OpenCV常用库函数[典]

    一.core 模块 1.Mat - 基本图像容器 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是 ...

  7. OpenCV机器学习库函数--SVM

    svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变. opencv中的svm分类代码,来源于libsvm. #include "o ...

  8. 【转】OpenCV 移植学习--EMCV

    在Opencv论坛有好些这方面的帖子,主要看了一下几个牛人的帖子,比如论坛管理员于博士Shiqi Yu:(EMCV:可在DSP上运行的OpenCV)http://www.opencv.org.cn/f ...

  9. OpenCV,计算两幅图像的单应矩阵

    平面射影变换是关于其次3维矢量的一种线性变换,可以使用一个非奇异的$3 \times 3$矩阵H表示,$X' = HX$,射影变换也叫做单应(Homography).计算出两幅图像之间的单应矩阵H,那 ...

随机推荐

  1. 基于Spring MVC + Spring + MyBatis的【密室逃脱游戏主题排行榜】

    资源下载: https://download.csdn.net/download/weixin_44893902/25706959 一.语言和环境 1. 实现语言:Java语言 2. 环境要求:ecl ...

  2. 开源社区Review代码步骤

    以Ranger项目为例,说明开源社区Review代码详细步骤. 1.寻找合适的issue进行review 首先自己需要是某个开源项目的committer, 要有合入代码的权限. 2.review代码 ...

  3. PHP 的扩展类型及安装方式

    扩展类型 底层扩展(基于C语言): PECL 上层扩展(基于PHP 语言): PEAR Composer PECL # 查找扩展 $ pecl search extname # 安装扩展 $ pecl ...

  4. CSS基础 清除浮动

    1.单伪元素清除法:清除浮动 .clearfix::after{             content: '.';             display: block;             c ...

  5. SYCOJ1717负二进制

    题目-负二进制 (shiyancang.cn) 进制的实质在于对于进制数的选择,选择不满足的填入当前的位置,然后除掉,继续开始选择.但是对于本题,是负数,但是进制上的数字为正数,所以就要调整,借位,因 ...

  6. test_5 排序‘+’、‘-’

    题目是:有一组"+"和"-"符号,要求将"+"排到左边,"-"排到右边,写出具体的实现方法. 方法一: l=['-', ...

  7. redis的使用场景和优缺点

    使用场景和优缺点: 2 Redis用来做什么? 通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求.而通常在一个电商类型的数据处理过程之中,有关商品,热销, ...

  8. 【代码优化】Bean映射之MapStruct

    [代码优化]Bean映射之MapStruct 一.背景 领域模型相互转换就只能靠手工的 get()/set()? 普遍的做法有以下几种: 手工 get()/set(): 构造器: BeanUtils ...

  9. 【刷题-LeetCode】123 Best Time to Buy and Sell Stock III

    Best Time to Buy and Sell Stock III Say you have an array for which the ith element is the price of ...

  10. 【记录一个问题】MariaDB 10.1.9 中with rollup的神器问题

    我想统计每天数据的处理状态的汇总,于是写了这样一条语句: 1 select * from ( 2 select ifnull(date(update_time),'_30天汇总') as dtm, i ...