Python OpenCV从入门到精通——第四章——像素的操作

这篇博客详细介绍了如何使用OpenCV读取图像并获取像素值,以及如何修改像素。同时,文章深入探讨了NumPy库,展示了创建、修改和操作数组的各种方法,包括随机数组的生成。此外,还涵盖了数组的索引、切片以及基本数学运算。最后,博客讨论了如何使用OpenCV创建图像,包括黑白和彩色图像,并进行了图像拼接操作。
摘要由CSDN通过智能技术生成
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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值