自贡建设专业网站设计,网站开发软件、,游戏软件制作公司,wordpress网店图像基本操作 5. 图像基本操作5.1 访问像素值并修改5.2 访问图像属性5.2 图像感兴趣区域ROI5.3 拆分和合并图像通道5.4 为图像设置边框#xff08;填充#xff09; 5. 图像基本操作
访问像素值并修改访问图像属性设置感兴趣区域#xff08;ROI#xff09;分割和合并图像
… 图像基本操作 5. 图像基本操作5.1 访问像素值并修改5.2 访问图像属性5.2 图像感兴趣区域ROI5.3 拆分和合并图像通道5.4 为图像设置边框填充 5. 图像基本操作
访问像素值并修改访问图像属性设置感兴趣区域ROI分割和合并图像
5.1 访问像素值并修改
访问像素值
import cv2# 读取图像
# img——(h, w, c)c为通道数
img cv2.imread(lena.jpg)# 访问像素值
px img[100, 100]
print(像素值, px)
# img——(b, g, r)
# 蓝色像素值——对应通道b
blue img[100, 100, 0]
print(蓝色像素值, blue)修改像素值
img[100, 100] [255,255,255]
print(img[100,100])简单访问每个像素值并修改比较缓慢一般不使用。
Numpy数组方法array.item()和array.itemset()被认为更好但是它们始终返回标量。
更好的像素访问和编辑方法
# 访问蓝色像素值
print(img.item(100, 100, 0))# 修改蓝色像素值
img.itemset((100,100,0), 255)修改B通道像素值为255区间[200:400, 200:400]
import cv2# 读取图像
# img——(h, w, c)c为通道数
img cv2.imread(lena.jpg)# 修改B通道像素值为255区间[200:400, 200:400]
for i in range(200, 400):for j in range(200, 400):img.itemset((i, j, 0), 255)# 显示图像
cv2.imshow(image, img)
cv2.waitKey(0)
cv2.destroyAllWindows()5.2 访问图像属性
属性属性包括行数、列数和通道数图像数据类型像素数等。
import cv2# 读取图像
# img——(h, w, c)c为通道数
img cv2.imread(lena.jpg)# 图像形状
print(图像形状, img.shape)
# 像素总数
print(像素总数, img.size)# 图像数据类型
print(图像数据类型, img.dtype)5.2 图像感兴趣区域ROI
对于人物图像我们感兴趣的一般是人脸区域。使用Numpy索引再次获得ROI并将脸复制到图像中的另一个区域
import cv2# 读取图像
img cv2.imread(lena.jpg)# 获取脸的区域
face img[200:400, 200:400]# 将脸复制到另一区域
img[200:400, 0:200] face# 显示图像
cv2.imshow(image, img)
cv2.waitKey(0)
cv2.destroyAllWindows()5.3 拆分和合并图像通道
将图像的通道进行分离并分开展示。同时实现OpenCV在一个窗口显示多张图像。
import cv2
import numpy as np# 读取图像
img cv2.imread(lena.jpg)# 分离通道
b, g, r cv2.split(img)# 合并通道
img_m cv2.merge((b, g, r))# 改变各通道图像的尺寸
b cv2.resize(b, (200, 200))
g cv2.resize(g, (200, 200))
r cv2.resize(r, (200, 200))
img cv2.resize(img, (200, 200))# 将单通道图像转换为3通道
b cv2.cvtColor(b, cv2.COLOR_GRAY2RGB)
g cv2.cvtColor(g, cv2.COLOR_GRAY2RGB)
r cv2.cvtColor(r, cv2.COLOR_GRAY2RGB)# 同一窗口显示多张图像
# 拼接需要图像的形状及通道一样
hmerge np.hstack((b, g, r, img)) # 水平拼接
vmerge np.vstack((b, g, r)) # 垂直拼接# 显示图像
cv2.imshow(image, hmerge)
cv2.waitKey(0)
cv2.destroyAllWindows()5.4 为图像设置边框填充
cv2.copyMakeBorder(src, top, bottom, left, right, borderType, dstNone, valueNone)函数在卷积运算零填充等方面有很多应用。 src输入图像 topbottomleftright边界宽度以相应方向上的像素数为单位 borderType定义要添加哪种边框的标志可以是以下类型 cv2.BORDER_CONSTANT 添加恒定的彩色边框cv2.BORDER_REFLECT 边框将是边框元素的镜像cv2.BORDER_REPLICATE最后一个元素被复制cv2.BORDER_WRAP包裹 dst目标图像 value边框的颜色
import cv2
import numpy as np# 读取图像
img cv2.imread(lena.jpg)
img cv2.resize(img, (200, 200))# 设置边框
constant cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_CONSTANT)
reflect cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_REFLECT)
replicate cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_REPLICATE)
wrap cv2.copyMakeBorder(img, 10, 10, 10, 10, cv2.BORDER_WRAP)# 图像拼接水平
hmerge np.hstack((constant, reflect, replicate, wrap)) # 水平拼接# 显示图像
cv2.imshow(image, hmerge)
cv2.waitKey(0)
cv2.destroyAllWindows()