一.OpenCV入门
一.安装opencv
1.安装Opencv-Contrib-Python
2.win+r打开电脑终端输入pip install opencv-contrib-python
二.入门,图像
1.图像的简单操作
1.cv2.imread(filename,flages)读取图像的函数*
filenname:要读取的图像的完整文件名或文件路径。
cv2.imread("D:\\CH\\cv\\add.jpg",1)双反斜杠
cv2.imread(r"D:\CH\cv\add.jpg",1)转换符
flages:要读取的图像颜色类型 ,参数默认为1,1为彩色,0为灰色
2.cv2.imshow(winname,mat)显示图像的函数
winname:显示图像的窗口名称
mat:要显示的图像
3.cv2.waitKey(delay)==27方法用于等待用户按下键盘上按键的时间
delay:等待用户在键盘上按键的时间单位毫秒,当delay等于0,负数,空格时为无限时间
27为Ascll值对应的键是Esc键,理解:按下Esc键关闭窗口Ascll值查看用ord()方法
4.cv2.destroyAllWindows()方法用于销毁所有正在显示的窗口
5.cv2.imwrite(filename,ing),方法用于保存图像
filename:要保存图像的完整路径从盘名到你要保存的图像名例如:
H:\python\opencv\CV\CH.jpg,其中CH.jpg为将保存的图片从新命名
ing:为读取图像信息的变量
import cv2
a=cv2.imread(r"图片名称.png",0)#读取的颜色为灰色
c=cv2.imread(r"图片名称.png“)#读取色彩图
print(a)#输出图片的像素值
cv2.imshow("image",a)#显示上面的图像
cv2.imshow("b",b)
cv2.waitKey(0)#永久显示图像并且按下任意键关闭窗口
cv2.destroyAllWindows()#销毁所显示的全部图像
2.图像的基本性质
一.shape,size,dtype三个属性
shape:彩色图像,获取的是一个包含图像的水平像素、垂直像素、和通道数的数组,即(垂直像素,水平像素,通道数),如果是灰度图获取的是垂直像素和水平像素。
size:获取的是像素个数,其值为“水平像素x垂直像素x通道数”灰度图像的通道为1。
dtype:获取图像的数据类型
三.像素
1.像素是图像的最小单位,是构成数字图像的基本单位。
import cv2
jmh=cv2.imread("CH.jpg")
for x in range(125,520):#x轴
for y inrange(0,500):#y轴
jmh[x,y]=[0,0,0]#修改BGR为黑色
cv2.imshow("ch",jmh)
cv2.waitKey()
cv2.destroyAllWindows()
#使用循环遍历像素点修改像素点
四.numpy操作像素
1.array(object,dtype,ndmin) 生成矩阵
abject:数组
dtype:数组的数据类型
ndmin:数组的最小维度
2.empty([x,y],dtype=type) 随机生成x行,y列可指定数据类型的二维矩阵
3.ones(x,y) 生成x行y列其元素为1且默认参数为浮点型的矩阵
2.二维矩阵的切片
a[嵌套列表的索引,嵌套列表内的索引] 要是索引了多个嵌套列表,则返回多个嵌套列表内部索引
高维度矩阵索引,从高维到低维
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
a[1,:3]
>>[4,5]
a[:,0]
>>[1,4,7]
#一维索引和二维索引
a[:,0]
>>[1,4,7]
a[:,0:1]
>>[[1],
[4],
[7]]
3.创建图像
黑白图像是二维数组,彩色图像是三维数组,数组的每个元素就是图像对应的像素值,修改像素就是修改数组
import cv2
import numpy as np
w=2000#设置长
h=1000#设置宽
jmh=np.zeros((w,h),np.uint8)#生成长为w,宽为h的二维数组
for i in range(0,w,40):#循环以宽为遍历,跨度为40
jmh[:,i:i+20]=255#白色区域宽为20个像素
cv2.imshow("ch",jmh)
cv2.waitKey(0)
cv2.destroyAllWindows()
彩色图像是由三位数组构成的像素以及通道构成------水平像素,垂直像素,通道数
b=255,0,0
g=0,255,0
r=0,0,255
import cv2
import numpy as np
h=700
w=1500
# a=np.zeros((w,h,3),np.uint8)#创建全是0的三位数组显示图片为纯黑
# b=a.copy()#为下面的蓝色操作图像拷贝数组,下同
# g=a.copy()
# r=a.copy()
# b[:,:,0]=255#修改第一通道蓝色
# g[:,:,1]=255#修改第二通道绿色
# r[:,:,2]=255#修改第三通道红色
# cv2.imshow("blue",b)#显示图像
# cv2.imshow("green",g)
# cv2.imshow("red",r)
# cv2.waitKey()
# cv2.destroyAllWindows()
a=np.random.randint(0,256,size=(h,w,3),dtype=np.uint8)#y,x轴
cv2.imshow("ch",a)
cv2.waitKey()
cv2.destroyAllWindows()
上面可执行代码的结果
4.拼接图像
a=np.hstack(tup) 水平拼接
参数tup:要拼接的图片像素矩阵
a=np.vstack
importcv2
importnumpyasnp
x=80
y=80
jmh=np.zeros((y,x,3),np.uint8)#生成一个宽为x,高为y的纯黑图像,指定维度为3,类型为uint8
a=jmh.copy()#浅拷贝
b=jmh.copy()
a[:,:,0]=255#修改第一通道为b
b[:,:,1]=255#修改第二通道为g
bmh=np.hstack((a,b))#水平拼接
vss=np.vstack((a,b))#垂直拼接
cv2.imshow("ch",vss)
cv2.imshow("CH",bmh)
cv2.waitKey()
cv2.destroyAllWindows()