numpy的一些操作

import cv2 as cv
import numpy as np
def access_fixel(img):
    '''访问图像的所有元素'''
    print(img.shape)
    # 获取图像的高度 图像的高度为shape的第一个值(维度)
    height = img.shape[0]
    # 获取图像的宽度 图像的宽度为shape的第二个值(维度)
    weight = img.shape[1]
    # 获取图像的通道数量 图像的通道数量为shape的第三个值(维度)
    channels = img.shape[2]
    for row in range(height):
        for col in range(weight):
            for c in range(channels):
                pv = img[row,col,c]
                img[row,col,c]=255-pv
    cv.imshow("access_fixel ", img)

def create_image():
    '''创建图像'''

    #创建一张宽高都是400像素的3通道 8位图片
    img = np.zeros([40,40,3],np.uint8)
    cv.imshow("create zeros", img)
    #修改对应通道号的值
    img[:,:,0] = np.ones([40,40]) * 255
    print("0 = ",img.shape)
    cv.imshow("create ones 0  ", img)
    img[:, :, 2] = np.ones([40, 40]) * 255
    print("2 = ", img.shape)

    cv.imshow("create ones 2  ", img)
    #创建一个单通道的8位图片
    img = np.zeros([40,40,1],np.uint8)
    img = img * 127
    cv.imshow("new image", img)
    #创建一张名字是127img.png 的图片
    cv.imwrite("127img.png",img)

    #numpy 数组维度的转换
    #定义一个二维数组
    img = np.ones([4,4,1],np.uint8)
    #填充每一个元素
    img.fill(1000) #这里很疑惑为什么不是255 而是232
    print("img = ",img)
    #变换为一维数组
    img = img.reshape(1,16)
    print("reshape 1 img = ", img)
    img = img.reshape(2, 8)
    print("reshape 2 img = ", img)


src = cv.imread("/Users/reon/Code/Python/OpenCv/durrells.jpg")
cv.namedWindow("input pic",cv.WINDOW_AUTOSIZE)
cv.imshow("input pic",src)
#获取时钟总数
t1 = cv.getTickCount()
#access_fixel(src)
#初始化一个dst 0矩阵图像
dst = np.zeros([src.shape[0],src.shape[1],src.shape[2]],np.uint8)
#相当于access_fixel 但是,处理速度快多了。
cv.bitwise_not(src,dst)
cv.imshow("out not pic",dst)
t2 = cv.getTickCount()
#计算便利一张图片所花的所有时间
time=((t2-t1)/cv.getTickFrequency())
print("time = ",time)
create_image()
cv.waitKey(0)
cv.destroyAllWindows()

你可能感兴趣的:(numpy的一些操作)