图像基本操作
目标
- 获取图像像素并修改
- 获取图像基本信息
- 获取图形ROI
- 图像通道拆分和合并
获取图像像素并修改制定的颜色
- 直接制定像素坐标修改
- 通过itemset方法获取并修改
import cv2
import numpy as np
img=cv2.imread('test.jpg')
px=img[100,100]
print(px)
blue=img[100,100,0]
print(blue)
img[100,100]=[255,255,255]
print(img[100,100])
# itemset 方法
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))
运行结果
[33 27 44]
33
[255 255 255]
206
100
获取图像属性
- img.shape 图像形状
- img.size 图像像素数目
- img.dtype 图像数据类型
print('img.shape', img.shape)
print('img.size', img.size)
print('img.dtype', img.dtype)
img.shape (489, 304, 3)
img.size 445968
img.dtype uint8
import matplotlib.pyplot as plt
%matplotlib inline
ball=img[180:300,200:300]
img[170:290,10:110]=ball
plt.imshow(img)
运行结果:
拆分及合并图像通道
- cv2.split(img) 通道拆分
- cv2.merge(img) 通道合并
- cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用Numpy 索引就尽量用。
img=cv2.imread('test.jpg')
r,g,b=cv2.split(img)
plt.subplot(231)
plt.imshow(img)
img=cv2.merge([b , g, r])
plt.subplot(232)
plt.imshow(img)
<matplotlib.image.AxesImage at 0x2010e3005f8>