转载地址:http://www.cnblogs.com/zsdydl-Neusoft/archive/2012/09/27/2706168.html
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 }
有关OPenCV的几个库函数的使用相关推荐
- 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 虚拟机交叉编译openCV详细步骤及bug解决详解
目的:交叉编译openCV库,用于xilinx的MIZ7020的FPGA的片上ARM运行. 目录 一.安装依赖项 二.安装编译器 2.1 编译器安装与路径 2.2 环境变量配置 三.安装依赖库 3.1 ...
- 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- yasm linux gcc,Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9 当前两个手头有两个项目都是都需要在ARM板中使用OpenCV,所以交叉编译必不可少.两三天里一直查阅各 ...
- 计算机视觉 - 图像增强应用实践 (基础篇)C++ OpenCV
环境配置我之前是跟着B站的一个UP主弄的:VS2019-Opencv4.5.2安装教程(win11上安装跟win10系统安装没有任何区别)_哔哩哔哩_bilibili (但是不知道是不是高版本的问题, ...
- 《OpenCv视觉之眼》Python图像处理十 :Opencv图像形态学处理之开运算、闭运算和梯度运算原理及方法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 移植opencv2.4.9到itop4412开发板
OpenCV是眼下开源项目中最著名的基于机器视觉方向的图像处理的开发包,眼下已经有被移植到嵌入式Linux环境上. 本文介绍了OpenCV交叉编译的基本步骤. 在opencv交叉编译之前要先进行依赖库 ...
- 数字图像处理之图像几何变换
图像的几何变换包括以下几个方面: 导入库 import numpy as np import matplotlib.pyplot as plt import cv2 as cv 显示图片函数 def ...
最新文章
- JDK5 新特性之 可变参数的方法(2)---asList
- C语言试题七十二之请编写函数判断三角形的类型,并输出其面积和类型。
- P3242 [HNOI2015] 接水果(整体二分、扫描线、dfs序)
- Android pm 命令详解
- C++ Primer章课后编程问题
- c 语言多参数函数,C/C++实现多参数函数编程
- lua游戏脚本实例源码_Redis Lua脚本中学教程(上)
- c#读取ini配置文件、将配置数据保存至ini文件
- SQLServer 2008数据库查看死锁、堵塞的SQL语句
- Windows批处理(cmd/bat)常用命令小结
- 画图软件Microsoft visio下载安装及使用
- 中国城市公园规划建设行业运行状况与趋势预测展望报告2022-2028年版
- FPGA20个例程专栏介绍
- android ios 对比 组件_Android和iOS的区别(从开发角度比较)
- 天梯赛+01训练总结
- 高级信息系统项目管理师(高项)高分通过经验分享
- 通用人工智能:我们还有多远?
- Java基础--面向对象(上)
- 《Speech and Language Processing》读书笔记——语法规则及其解析
- 揭秘美国云计算 大企业是第一推动力
热门文章
- CentOS7 安装lua环境
- phpul 无序列表,PHP – 简单嵌套无序列表(UL)数组
- python 三分类的哑编码_python数据挖掘实战 -数据预处理篇(数据可视化-空值填充-哑变量编码)...
- vue使用dialog关闭前调用_element-ui的dialog如何关闭自身?
- python的前端个web的前端有什么区别_用Python 操作Web 前端 基础
- linux将a文件移动到bb,linux中vi整理全集(基础)
- 485串口测试工具软件_(案例)电脑和仪表之间485通讯的奇怪现象及解决方案
- UE4中多种颜色轮廓线的后期处理
- 翻译自 RedHat 文章:What is middleware? (什么是中间件?)
- 容器技术:华为云如何帮助企业落地Kubernetes