opencv 1
numpy基础
例:import numpy as np
a = np.int8(1203) #定义为八位的整数
a = np.array([]) #将列表转换为数组 可延申,格式参考列表[]元组()
在将嵌套的多维数据转换为数组时,同维度数据的个数应该相同;否则,NumPy会将其作为一个Python对象放入数组。
使用zeros()函数创建数组,数组元素默认值为0
例:np.zeros((2,3),dtype=int) #创建2行3列的二维数组,指定数组元素的数据类型
用arange()创建数组,按左闭右开规则递增
例:np.arange(5.6),取值范围为[0,5],元素数据类型默认与参数一致
用linspace(a,b,c)创建数组 第一个元素是a,最后一个是b,差值是(b-a)/(c-1)
用indices创建数组,indices((a,b))为a*b的数组
ones函数创建单位矩阵,元素值全为1
用shape查看数组形状,查看数值范围,(a,-1)改变数组形状,a为行数,-1为每行元素自动运算;reshape()可以改变数组形状,并返回更改后的新数组,但它不能用于减少或增加行个数.
例:a.resize((2,5),refcheck=False)
resize方法可以改变形状同时改变元素个数。
np.revel(a,order="F")可以将数组转换为一维数组,默认优先行,如果加上F则优先列。
a[-1]表示a列表内最后一个元素
d[a:b]表示从第a+1个元素读到第b+1个元素,即为原列表的切片
d[:b]表示从起点读到第b+1个,同理可得d[a:]
矩阵运算符号:+ - @ .dot() .T转置
存在运算:min(),max(),sum()
numpy数组支持+= *=赋值运算,并且会用计算结果覆盖原数组
a.max(axis=0) #返回最大值所在的行
axis=1 #返回每一行中的最大值
sum(axis=0/1)#按列/行执行加法
Max min axis=0 则 把数据映射到横轴上进行运算(横轴压扁)
Axis=1 则 把矩阵数据映射到 竖轴y轴 上进行运算(纵轴压扁)
如果不指定axis 则对全部的矩阵元素进行操作, 全部元素求最大最小。
2.读写显示图像
import cv2
img=cv2.imread('lena.jpg') #读取图像
print(type(img)) #输出数据类型
print(img) #输出图像数组
print(img.shape) #输出数组形状 即高度宽度通道数
print(img.dtype) #输出数组元素的数据类型
print(img.size) #输出数组元素的个数
代码中img.dtypes的输出结果为uint8,说明每个数组元素用一个字节(8位)保存,每个数组元素为一个像素的B、G和R通道的颜色值,颜色值取值范围为[0,255]。
代码中img.size的输出结果等于数组形状的3个维度大小的乘积
import cv2
import numpy
img=numpy.zeros((50,50),dtype=numpy.uint8) #创建大小为50×50的黑色grb(0,0,0)正方形图像
cv2.imwrite('mypic2-1.jpg',img) #将图像存入文件
import os
print(os.getcwd()) # 获取当前工作目录路径
print(os.path.abspath('.')) # 获取当前工作目录路径
imshow("name",mode)用于显示图像,name为文件名/路径(窗口名称),mode为图形数组。
waitKey()等待用户输入,基本格式如下:
rv=cv2.waitKey([delay]) 没有输入返回-1,有输入返回键的ASCII码,delay表示等待按键时间(ms),负数或者0表示无限等待;等待时间结束时结束等待,函数返回-1.
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读取图像,缩小为原来的1/2 cv2.imshow('lena',img) #显示图像
key=0 while key!=27: #按Esc键时终止循环
key=cv2.waitKey() #等待按键
cv2.destroyWindow('lena') #关闭图像窗口
cv.release() #关闭视频窗口
3.
可以利用while True达到渐变画面效果
img[:,:]=n #更改图像灰度值
b=img[:,:,0B1G2R]获得BGR通道图像
cv.imshow("img_BGR",bgr)显示通道图像
用b,g,r=cv2.split(img)命令拆分图像
gbr=cv2.merge([g,b,r]) #按新顺序合并
用+和cv2.add()函数进行图像加法运算,但要保证两幅图同一维度,有相同一个brg值
加权加法运算:img3=cv2.addWeighted(img1,0.8,img2,0.2,0)
位运算:
cv2.bitwise_and(src1,src2[,mask]):mask对应的位不为0时,图像src1和src2执行按位与操作。 cv2.bitwise_or(src1,src2[,mask]):mask对应的位不为0时,图像src1和src2执行按位或操作。 cv2.bitwise_not(src1[,mask]):mask对应的位不为0时,图像src1执行按位取反操作。 cv2.bitwise_xor(src1,src2[,mask]):mask对应的位不为0时,图像src1和src2执行按位异或操作。