OpenCV中用到的矩阵都要转换为Numpy数组
创建矩阵
创建数组array()
a=np.array([2.3,4]) # 一维数组
c=np.array([[1.0,2.0],[3.0,4.0]]) # 二维数组
import numpy as np
# 通过array定义矩阵
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6]])
print(a, b, sep='\n')
创建全0数组 zeros()/ones
# 定义zeros和ones矩阵
c = np.zeros((8, 8, 3), np.uint8) # 表示的是8行8列的矩阵
d = np.zeros((8, 8), np.uint8)
f = np.ones((9, 5), np.uint8)
# (8,8,3)(行的个数,列的个数,通道数/层数),
# np.uint8是矩阵中的数据类型.每个元素的最大值是255
# 这里的3,对于RGB来说是有三个通道的,三个矩阵在一起,才形成彩色图片,如果是灰色图像值为0
创建全值的数组full()
g = np.full((7, 9), 255, np.uint8)
# (7, 9, 3)表示的是(行的个数,列的个数,通道数、层数),255表示每个元素的数值
print(g)
创建单元数组identity/eye()
e = np.identity(4),表示4行4列的单位阵
import numpy as np
e = np.identity(4) # 表示4行4列的单位阵
z = np.eye(5, 3) # 表示5行3列的单位阵
c = np.eye(5, 7) # 表示5行7列的单位阵
v = np.eye(5, 7, k=3) # 表示5行7列的单位阵,从第k+1行开始。
print(e, z, c, v, sep='\n')
检索与赋值
1.[y,x,channel]与通常使用的不一样,y在前,x在后面。
2.操作矩阵元素的每个索引值是从0开始的不是1开始的。
import cv2
import numpy as np
img = np.zeros((480, 640, 3), np.uint8)
print(img[100, 100])
# 从矩阵中读元素的值
count = 0
n = 100
y = 100
# 向矩阵中某个元素赋值
while count < 200:
img[100, count, 0] = 255
# BGR是三颜色通道,这里颜色通道填0就是blue,1就是green,2就是red
# 或者这里可以写成img[100, count] = [255,0,0]这里面的顺序按照BGR排列
img[count, 100] = [0, 255, 0]
count = count+1
while 100 <= n < 200:
img[y, n] = [0, 0, 255]
n += 1
y = n
cv2.imshow('color', img)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()
获取子矩阵(ROI)region of image
[y1:y2,x1:x2]从y1到y2,x1到x2
[:,:] 整个图像的矩阵元素
import cv2
import numpy as np
img = cv2.imread('d:\\download\\1.jpg')
roi = img[100:200, 100:200]
roi[:, :] = [0, 0, 255]
roi[10:200, 10:200] = [0, 255, 0]
cv2.imshow('color', img)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()