转载请注明来源: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. 简单学生管理系统HTML前端页面

    效果图: 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  2. 在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果

    查看本章节 查看作业目录 需求说明: 在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果 用户将光标移动到"最新动态页"或"帮助查询" ...

  3. linux -安装redis ,配置密码,开启远程访问

    1.安装 添加epel源yum install epel-release查看yum repolist安装redis命令yum install redis查看Redis安装了哪些文件find / -na ...

  4. Zabbix忘记用户名和密码的解决方法

    问题描述: 最近刚搭建了zabbix服务器,然后新增加了一个用户,并且把默认的Admin禁用了.然后这个监控页面一直没关,保持了10多天,今天不小心把浏览器关闭了,重新打开后,突然忘记了用户名,这下麻 ...

  5. js获取设备公网ip + 服务器根据公网ip 获取IP信息

    1.前言 本来呢,想实现js定位功能,最少定位到城市,一开始,使用的是搜狐的api直接获取数据,可是,有时候搜狐不可靠,只能得到 公网ip,其他信息无用,就像这样 2.既然这样,还不如我自己请求自己的 ...

  6. centos7 系统级别(持续更新)

    查看当前系统级别 runlevel 获取当前级别 systemctl get-default centos7中只能通过target来设置.先获取target列表 ls -l /usr/lib/syst ...

  7. MySQL索引失效之隐式转换

    常见索引失效: 1. 条件索引字段"不干净":函数操作.运算操作 2. 隐式类型转换:字符串转数值:其他类型转换 3. 隐式字符编码转换:按字符编码数据长度大的方向转换,避免数据截 ...

  8. 编写Hive的UDF(查询平台数据同时向mysql添加数据)

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812629187518530052/ 可能会有一些截图中会有错误提示,是因为本地的包一直包下载有问题,截完图已经下 ...

  9. Numpy实现简单BP神经网络识别手写数字

    本文将用Numpy实现简单BP神经网络完成对手写数字图片的识别,数据集为42000张带标签的28x28像素手写数字图像.在计算机完成对手写数字图片的识别过程中,代表图片的28x28=764个像素的特征 ...

  10. Web开发之request

    request常用方法 //常用方法 //得到的是:协议+服务器地址+端口号+工程名称+资源地址+参数 String url = request.getRequestURL(); //得到的是:工程名 ...