import cv2
# ——————————————————————————像素
image = cv2.imread("2.1.jpg")
# ——————————# 获取当前小方块,及各个通道上的像素值
px = image[291, 218]
blue1 = image[291,218,0] #获取坐标(219,218)上三个通道的像素值
green1 = image[291,218,1]
red1 = image[291,218,2]
print(blue1,green1,red1)
#PX为当前像素(当前291列218行小方块)的像素值按照BGR返回(BLUE,GREEN,RED),把每一种颜色分量所在的区域叫做通道,横轴像素有219个,对应的取值范围是0~218,纵轴类似
# ——————————#修改当前小方块的BGR值
image[291,218] = [255,255,255]
——————————————————————————
import numpy as np #导入numpy模块
# ——————————————————————————创建数组(size的精细设置方法:size=(200,200,3))
# numpy.array(object,dtype,copy,order,subok,ndmin) 参数依次是:具有数组接口的对象,数据类型,是否生成副本(可选参数),元素再内存中的出现顺序(按列还是按行),是否传递子类,数组维数
n1 = np.array([1,2,3]) #创建一个简单的一维数组
n3 = np.array([[1,2],[3,4]]) #创建一个简单的二维数组
list = [1, 2, 3] # 列表
n1 = np.array(list, dtype=float) # 创建浮点型数组
nd1 = [1, 2, 3]
nd2 = np.array(nd1, ndmin=3) #创建三维数组,nd1一维数组转换成了三维数组
print(nd2)
n = np.empty([2, 3]) #创建用0填充的数组
print(n)
n = np.zeros((3, 3), np.uint8) #创建用1填充的数组
print(n)
n = np.ones((3, 3), np.uint8) #创建纯1数组
print(n)
# ——————————————————————————创建随机数组
#numpy.random.randiant(low,high,size) 参数依次为:最小值,最大值(若high为空则范围为【0,low】),数组维数
suiji = np.random.randint(256,size=(200,200,3),dtype = np.uint8) #无high,则为【0,256】,此时设置了维度为3,否则默认维度为2,图片不能拼接size=(200,200,3)
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以内二维数组')
print(n3)
# ————————————————————————————操作数组
# 加减乘除幂运算:数组中对应位置元素相加、减、乘、除、幂
n1 = np.array([1, 2]) # 创建一维数组
n2 = np.array([3, 4])
print(n1 + n2) # 加法运算
print(n1 - n2) # 减法运算
print(n1 * n2) # 乘法运算
print(n1 / n2) # 除法运算
print(n1 ** n2) # 幂运算
#比较运算:运算的结果为布尔值数组。数组中的布尔值为数组中对应位置元素比较结果
print(n1 >= n2) # 大于等于
print(n1 == n2) # 等于
print(n1 <= n2) # 小于等于
print(n1 != n2) # 不等于
#复制数组为新数组
n1 = np.array([1, 2]) # 创建一维数组
n2 = n1.copy() # 创建复制第一个数组
n3 = np.array(n2,copy=True) # 创建复制第二个数组
# ————————————————————————————————数组的索引和切片
#当step为正数,第一个为起始点,第二个为终止点。此时可以确定默认值。
#当step为负数,第一个为终止点,第一个为起始点。此时可以确定默认值。
#确定默认值之后,然后第一个为起始点,第二个为终止点,从起始点到终止点的范围中始终要去掉第二个对应的值。
#一维数组索引及切片
n1=np.array([1,2,3])
print(n1[0])
print(n1[0:2])
n = np.array([0,1,2,3,4,5,6,7,8,9])
print(n[::-1]) # 9 8 7 6 5 4 3 2 1 0
print(n[:-3:-1]) # 9 8 此时step为负 第一个为终止点,默认对应的值是9
print(n[-3::-1]) # 7 6 此时step为负 第二个为起始点,默认对应的值是0
#二维数组索引及切片:第一个为行第二个为列,先切行再切列
n = np.array([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]])
print(n[1])
print(n[1, 2])
print(n[:2, 1:])
print(n[1, :2])
print(n[:2, 2])
print(n[:, :1])
# ——————————————————————————————————————创建图像
import cv2
# ——————————创建黑白图像
width = 200
height = 100
img1 = np.zeros((height, width), np.uint8) #创建纯黑图像,创建指定宽高、单通道、像素值都为0的图像
img2 = np.ones((height, width), np.uint8) * 255 #创建纯白图像
img1[25:75, 50:100] = 255 #修改图像指定位置像素,图像纵坐标25~75、横坐标50~100之间的区域变为白色
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.waitKey()
cv2.destroyAllWindows()
# ——————————创建彩色图像
width = 200
height = 100
img = np.zeros((height, width, 3), np.uint8) # 创建指定宽高、3通道、像素值都为0的图像
blue = img.copy()
green = img.copy()
red = img.copy()
blue[:, :, 0] = 255 # 设置通道像素
green[:, :, 1] = 255 # 1通道所有像素都为255,,2通道所有像素都为255,3通道所有像素都为255
red[:, :, 2] = 255
cv2.imshow("blue", blue)
cv2.imshow("green", green)
cv2.imshow("red", red)
# ——————————创建指定宽高、单通道、随机像素值的图像,随机值在0~256之间,数字为无符号8位格式
img = np.random.randint(256, size=(height, width), dtype=np.uint8)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
# ——————————————————————————————————拼接图像
img = cv2.imread("stone.jpg")
img_h = np.hstack((img, img)) # 水平拼接两个图像
img_v = np.vstack((img, img)) # 垂直拼接两个图像
cv2.imshow("img_h", img_h)
cv2.imshow("img_v", img_v)
cv2.waitKey()
cv2.destroyAllWindows()
2.1.jpg
stone.jpg