目录
Opencv中用到的矩阵都要转换成Numpy数组
Numpy是一个经高度优化的Python数值库
Numpy基本操作
图形的操作就是对矩阵的操作
1.创建矩阵
创建数组array()
创建全0数组zeros()/ones,ones为创建全为1的数组
创建全值数组full()
创建单元数组identity/eye(),单位矩阵,eye()创建非方阵型的单位矩阵
Array
import numpy as np
a=np.array([1 ,2 ,3]) #创建1维数组
b=np.array([[1,2,3],[4,5,6]]) #创建2维数组,中间用,分割
print(a)
print(b)
zeros
c=np.zeros((480,640,3),np.uint8)
共两个参数
(480,640,3)(行的个数,列的个数,通道数/层数)
np.uint8矩阵中的数据类型
#定义zeros矩阵
c=np.zeros((5,5,3),np.uint8)
print(c)
#定义ones矩阵
d=np.ones((5,5,3),np.uint8)
print(d)
full
c=np.full((480,640,3),255,np.uint8)
(480,640,3)(行的个数,列的个数,通道数/层数)
255表示每个元素的数值
#定义full矩阵
e=np.full((2,2,3),255,np.uint8)
print(e)
identity
c=np.identity(3)
斜对角为1,其他为0
#定义identity矩阵
f=np.identity(3)
print(f)
eye
c=np.eye(3,5,k=3)
可以为非正方形矩阵,K为从第一行的第几个元素开始
#定义eye矩阵
g=np.eye(3,5,k=2)
print(g)
2.检索与赋值[y,x]
注意下标不同,y在前,索引值从0开始
多通道表示[y,x,channel],对于图像而言
import numpy as np
import cv2
img =np.zeros((480,640,3),np.uint8)
#检索
print(img[100,100])
#赋值
count = 0
while count <200:
img[count,100,0] = 255 #改变第一层为0,2层为1,3层为2 顺序为BGR
#img[count,100,0] = [0,0,255] #3层都赋值,1层为0,2层为0,3层为255
count= count+1
cv2.imshow('img',img)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
cv2.destroyAllWindows
3.获取子数组[:,:]
Region of Image (ROI) 图像中的某一区域
使用格式
[y1:y2,x1:x2] [:,:]
import numpy as np
import cv2
img = np.zeros((480,640,3),np.uint8)
roi = img[100:400,100:600]
#roi[:,:]=[0,0,255] #将上面的一块区域设为红色
roi[:]=[0,0,255] #与上面功能相同,是roi[:,:]的缩写
roi[10:50,10:60] = [0,255,0] #画绿色的方块
#可以通过该方法画任意图形
cv2.imshow('img',roi)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()