OpenCV函数总结
Posted 是一个小迷糊吧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV函数总结相关的知识,希望对你有一定的参考价值。
0...Numpy相关介绍
1).ndarray对象及其常用属性
ndarray是Numpy中可进行快速数学运算,具有广播能力且节约空间的N维数组对象。ndarray支持多维数组,而且提供了更多的操作功能,但是nddary对象中的所有元素必须为相同类型。
1)ndarray.shape
nadrray.shape表示数组的维度,返回一个元组,元组的长度即ndim。此属性可用于获取图像的尺寸,对于可以用n行和m列的数组表示的灰度图像img,img.shape(n,m);对于需要由3个n行和m列的数组表示的BGR图像的img0,img0.shape为(n,m,3)
2)ndarray.dtype
ndarray.dtype表示数组中元素的数据类型。图像在计算机中由像素构成的矩阵表示,每个像素值的大小决定了图像的质量。如果用8位无符号证书存储16位图像,会造成图像的颜色的改变,从而显示错误的图像。。
3)ndarray.ndim
ndarray.ndim表示数组的维度。ndim可用来比哦啊是你图像的通道数。在OpenCV函数中,通常使用C1、C2、C3、C4分别表示单通道、双通道、三通道和四通道。
4)ndarry.size
ndarry.size表示数组元素的总个数,在图像中常用它来计算数组中像素的个数。
5)代码实例:
#Numpy_Attributes.py中ndarry对象常用属性的使用实例
2).NumPy常用函数
1)创建ndarray对象
np.array()函数是创建数据最简单的方式,可以接受一切序列型的对象,并且可以指定对象中元素的数据类型。若没有指定,则会自动为新创建的数组推断一个合适的数据类型。
2)ndarray对象的切片和索引
img[0,0]可以选择灰度图像img中位于(0,0)位置的像素;img[x1:x2,y1:y2]可以对灰度图像img进行裁剪,其中x1、y1为图像左上角的坐标,x2、y2为图像右下角的坐标;img1[:,:,0]可以选取彩色图像img 中的蓝色通道。
3)生成随机数
np.random模块提供了能够生成多种随机数的函数。np.random.randint()函数可以从给定的范内随机选取整数;np.random.randn()函数可以产生服从均值为0、标准差为1的正态分布的数据。
4)代码实例
#Numpy_Operations.py中的NumPy相关函数的操作实例
1...图像的读取与显示
1)图像读取函数
img = cv.imread(filedname
[,flags])
参数:filename:需要读取的图像的路径,包含图像的名称和图像的扩展名
flags: 读取图像的形式和标志,如将彩色图像按照灰度图来读取,默认是按照彩色图像格式读取
备注:如果图像路径错误、破损或者格式不被支持,则无法正确读取图像,但此时不会报错,而是返回None。函数的第一个参数以字符串形式给出需要读取图像的路径,第二个参数设置读取图像的形式,默认以彩色图的形式读取。通过编码器内部转换可将彩色图像转换为灰度图,这可能会与OpenCV中将彩色图像转换成灰度图函数的转换结果有差异。这些标志在功能不冲突的前提下可以同时声明多个,彼此之间用“|”隔开。
cv.imread()函数中可选择的标志
标志 | 简记 | 作用 |
---|---|---|
cv.IMREAD_UNCHANGED | -1 | 按照图像原样读取,保留alpha通道(第4个通道) |
cv.IMREAD_GRAYSCALE | 0 | 将图像转换成单通道灰度图像后读取 |
cv.IMREAD_COLOR | 1 | 将图像转换成三通道BGR彩色图像后读取 |
cv.IMREAD_ANYDEPTH | 2 | 保留原图像的16位、32位深度。若不声明该标志,则转成8位深度后读取 |
CV.IMREAD_ANYCOLOR | 4 | 以任何可能的颜色格式读取图像 |
cv.IMREAD_LOAD_GDAL | 8 | 使用GDAL驱动程序加载图像 |
cv.IMREAD_REDUCED_GRAYSCALE_2 | 16 | 将图像转换成单通道灰度图像,尺寸缩小至原来的1/2。更改最后一位数字可以缩小至原来的1/4(最后一位改为4)和原来的1/8(最后一位改为8) |
cv.IMREAD_REDUCED_COLOR_2 | 17 | 将图像转换成三通道彩色图像后读取,尺寸缩小至原来的1/2。更改最后一位数字可以缩小至原来的1/4(最后一位改为4)和原来的1/8(最后一位改为8) |
cv.IMREAD_IGNORE_ORIENTATION | 128 | 不以EXIF的方向旋转图像 |
2)图像窗口函数
None = cv.nameWindow(winname
[,flags])
参数:winname :窗口名称,用作窗口的标识符
flag: 窗口属性设置标志
备注:该函数会创建一个窗口变量,用于显示图像和滑块,通过窗口名称引用该窗口。如果在创建窗口时已经存在具有相同名称的窗口,则该函数不会有执行任何操作。该函数的第一个参数用于唯一识别窗口,第2 个参数主要用于设置窗口的大小是否可调、显示的图像是否填充窗口等。标志在功能不冲突的前提下可以同时声明多个,不同参数之间用“|”隔开即可.
标志 | 简记 | 作用 |
---|---|---|
cv.WINDOW_NORMAL | 0x00000000 | 显示图像后,允许用户随意调整窗口大小 |
cv.WINDOW_AUTOSIZE | 0x00000001 | 根据图像大小显示窗口,不允许用户调整大小 |
cv.WINDOW_OPENGL | 0x00001000 | 创建窗口的时候会支持OpenGL |
cv.WINDOW_FULLSCREEN | 1 | 全屏显示窗口 |
cv.WINDOW_FREERATIO | 0x00000100 | 调整图像尺寸以充满窗口 |
cv.WINDOW_KEEPRATIO | 0x00000000 | 保持图像的比例 |
cv.WINDOW_GUI_EXPANDED | 0x00000000 | 创建的窗口允许添加工具栏和状态栏 |
cv.WINDOW_GUI_NORMAL | 0x00000010 | 创建没有状态栏和工具栏窗口的方法 |
3)图像显示函数
None = cv.imshow(winnaame,
img)
参数: winname : 要显示图像的窗口名称,用字符串形式赋值
img: 要显示的图像
备注:该函数会在指定的窗口中显示图像,如果在此函数之前没有创建同名的图像窗口,就会使用cv.WINDOW_AUTOSIZE标志创建一个窗口,显示图像的原始大小。如果创建了图像窗口,则会缩放图像以适应窗口属性。该函数会根据图像的深度(数据类型)将其缩放,具体缩放规则如下:
1@ :如果图像是uint8类型,则按照原样显示
2@:如果图像是uint16类型或者int32类型,则会将像素值除以256,将范围由[0,255x256]映射到[0,255].
3@: 如果图像是float32和float64类型,则将像素乘以255,即将范围有[0,1]映射到[0,255]。
注意:第2个参数类似于cv.imread()中读取的ndarry形式的矩阵。
以上是关于OpenCV函数总结的主要内容,如果未能解决你的问题,请参考以下文章