图片显示:
import cv2 image = cv2.imread("3.1.jpeg") cv2.imshow("flower",image)#显示的照片会自动销毁 #显示图像若没有下一句则照片会直接销毁,不会停留, cv2.waitKey(10000)#目的:停顿当前场景一段时间 #此时电脑等待用户按键,若没有按键则会等待设置的时长然后才会执行下一句,若按键了会直接执行下一句,参数为0、负数、或空无限等待 cv2.destroyAllWindows() #销毁所有正在显示的窗口 #cv2.imwrite("C:\.android",image)#这个路径有问题,换一个正确的路径就行 # D:/3.1.jpeg等同于D:\\3.1.jpeg 将照片保存到C盘下
输出位置:
#路径、窗口名中不可出现中文 import cv2 image = cv2.imread("3.1.jpeg") #返回值就是图像,image即图像 for i in range(0,20): for j in range(0,20): image[i,j] = [0,0,255] for i in range(0,20): for j in range(1003,1023): image[i,j] = [255,255,255] for i in range(662,682): for j in range(1003,1023): image[i,j] = [0,255,0] for i in range(662,682): for j in range(0,20): image[i,j] = [0,0,0] for i in range(340,360): for j in range(490,510): image[i,j] = [0,255,255] cv2.imshow("20040420",image) cv2.waitKey()#此时等待用户按键,参数为0、负数、或空无限等待
获取图像属性:
#每幅图像都是由M行N列的像素(每一个小方块或者圆形或者其他形状)组成的,每一个像素都储存着一个像素值 import cv2 image = cv2.imread("3.1.jpeg") print("获取色彩图像的属性:") print("shape =",image.shape) #获取像素个数 #返回垂直像素,水平像素,通道数,灰色图片通道数为1 print("size =",image.size) #获取图片元素大小即垂直像素*水平像素*通道数 print("dtype =",image.dtype) #获取图像的数据类型 image_Gray = cv2.imread("3.1.jpeg",0) #读取与彩色图像对应的灰色图像,0表示灰色,1表示彩色可忽略不写,因为默认彩色 print("获取灰度图像的属性:") print("shape =",image_Gray.shape) print("size =",image_Gray.size) print("dtype =",image_Gray.dtype) px = image[291,218] #获取当前位置的像素值 #PX为当前像素(当前小方块,先纵列再行)的像素值按照BGR返回(BLUE,GREEN,RED) #把每一种颜色分量所在的区域叫做通道 #横轴像素有219个,对应的取值范围是0~218 #纵轴类似 print("坐标(291,218)上的像素的BGR是",px) #输出像素值 px = [255,255,255] #修改像素值,将(291,218)位置上的像素修改为【255,255,255】 print("改变后的元素值",px) blue1 = image[:,:,0]#获取坐标(219,218)上B通道的像素值 green1 = image[:,:,1]#获取坐标(219,218)上G通道的像素值 red1 = image[:,:,2]#获取坐标(219,218)上R通道的像素值
数组:
import cv2 import numpy as np #创建数组 n1 = np.array([1,2,3]) n2 = np.array([0.1,0.2,0.3]) n3 = np.array([[1,2],[3,4]]) print(n1,n2,n3) #通过dtype,指定数组数据类型 list = [1,2,3] n1 = np.array(list, dtype = np.float_) n2 = np.array(list, dtype = float) print(n1, n2) print(n1.dtype) print(type(n1[0])) #创建三维数组 ndmin为3即为三维数组 nd1 = [1,2,3] nd2 = np.array(nd1, ndmin = 3) print(nd2) #创建两行三列未初始化数组 n = np.empty([2,3]) print(n) #创建无符号8位整数纯0数组 n = np.zeros((3,3),np.uint8) #创建纯1数组 n = np.ones((3,3),np.uint8) #随机数、数组的生成 n1 = np.random.randint(1,3,10) print("随机生成10个1~3且不包括3的整数:") print(n1) n2 = np.random.randint(5,10) print("size数组大小为空随机返回一个整数") print(n2) n3 = np.random.randint(5,size = (2,5)) print("随机生成5以内二维数组") #数组加法 n1 = np.array([1,2,3]) n2 = np.array([4,5,6]) print(n1+n2) #数组减法 print(n1-n2) #数组乘法 print(n1*n2) #数组除法 print(n1/n2) #数组幂运算 print(n1**n2) #数组比较运算返回TRUE/FALSE print(n1 >= n2) print(n1 == n2) print(n1 <= n2) print(n1 != n2) #复制数组 两种 n2 = np.array(n1,copy = True) n2 = n1.copy() #以下分为两种 直接得到元素(取位置)或得到数组(切片) #数组索引 print(n1[0]) #数组切片取前一个不取后一个,step为步长,当step为负数时表示倒着走 print(n1[0:2]) print(n1[1:]) print(n1[:3]) #反向索引 s print(n1[-1]) print(n1[-1:-3:-1]) print(n1[::-1]) #二维数组索引 n = np.array([[0,1,2,3],[2,3,4,5],[7,3,4,5,]]) print(n[1]) print(n[1,2]) print(n[-1]) #二维数组切片 print(n[:2,1:]) print(n[1,:2]) print(n[:2,2]) print(n[:,:1]) #操作第一个切片之后剩下三个数组,后来的切边对每个数组都操作 #数组行索引 = 像素所在行数-1 = 像素纵坐标 #数组列索引 = 像素所在列数-1 = 像素横坐标 #创建图像 width = 200 height = 100 img = np.zeros((height,width),np.uint8) cv2.imshow("img",img) cv2.waitKey() cv2.destroyAllWindows()