数组类型可以在创建时显示指定
>>> c = array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
通常,数组的元素开始都是未知的,但是它的大小已知。因此,NumPy提供了一些使用占位符创建数组的函数。这最小化了扩展数组的需要和高昂的运算代价。
函数 function
创建一个全是0的数组,函数 ones
创建一个全1的数组,函数 empty
创建一个内容随机并且依赖与内存状态的数组。默认创建的数组类型(dtype)都是float64。
>>> zeros( (3,4) )
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>> ones( (2,3,4), dtype=int16 ) # dtype can also be specified
array([[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]],
[[ 1, 1, 1, 1],
[ 1, 1, 1, 1],
[ 1, 1, 1, 1]]], dtype=int16)
>>> empty( (2,3) )
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
[ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
为了创建一个数列,NumPy提供一个类似arange的函数返回数组而不是列表:
>>> arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> arange( 0, 2, 0.3 ) # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
当 arange
使用浮点数参数时,由于有限的浮点数精度,通常无法预测获得的元素个数。因此,最好使用函数 linspace
去接收我们想要的元素个数来代替用range来指定步长。
其它函数array, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, rand, randn, fromfunction, fromfile参考: NumPy示例
#####split_img.py
import cv2
import numpy as np
img=cv2.imread('messi5.jpg')
b,g,r=cv2.split(img)
cv2.namedWindow('imageb')
cv2.imshow('imageb',b)
cv2.namedWindow('imageg')
cv2.imshow('imageg',g)
cv2.namedWindow('imager')
cv2.imshow('imager',r)
cv2.waitKey(0)
b=img[:,:,0]
g=img[:,:,1]
r=img[:,:,2]
cv2.namedWindow('imageb')
cv2.imshow('imageb',b)
cv2.namedWindow('imageg')
cv2.imshow('imageg',g)
cv2.namedWindow('imager')
cv2.imshow('imager',r)
cv2.waitKey(0)
cv2.namedWindow('image')
cv2.imshow('image',img)
print "======================="
cv2.waitKey(0)
img2=np.zeros(img.shape, dtype=np.uint8)
img2[:,:,0]=b
img2[:,:,1]=g
img2[:,:,2]=r
cv2.namedWindow('image2')
cv2.imshow('image2',img2)
cv2.waitKey(0)