import cv2
img=cv2.imread('demo.png')
px=img[100,100]
print(px) #[203 166 107]
blue=img[100,100,0]
print(blue) #203
demo.png图像:
import cv2
img=cv2.imread('demo.png')
print(img.item(10,10,2)) #48
img.itemset((10,10,2),100)
print(img.item(10,10,2)) #100
2、获取图片属性import cv2
img=cv2.imread('demo.png')
# 获取图像的形状
print(img.shape) # (368, 487, 3)
# 返回图像的像素数目
print(img.size) # 537648
# 返回图像的数据类型
print(img.dtype) # uint8
3、图像 ROI ROI = img[1:200,200:300]
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.imshow('img',ROI)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
import cv2
img=cv2.imread('demo.png')
b,g,r=cv2.split(img) #拆分 或者b=img[:,:,0],img[:,:,2]=0
img=cv2.merge(b,g,r) #合并
5、为图像填边
如果你想在图像周围创建一个边,就像相框一样,你可以使用 cv2.copyMakeBorder()函数。这经常在卷积运算或 0 填充时被用到。这个函数包括如下参数:import cv2
import numpy as np
from matplotlib import pyplot as plt
BLUE=[255,0,0]
img1=cv2.imread('demo.png')
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
运行结果(由于是使用 matplotlib 绘制,所以交换 R 和 B 的位置,OpenCV 中是按 BGR, matplotlib 中是按 RGB 排列 ):