阅读背景:

python3-opencv库(2)--遍历图像像素,利用Numpy创建图像,Numpy基本操作

来源:互联网 

版权声明:转载请注明原作者及出处

import numpy as np
from cv2 import cv2 #或者用import cv2(由于库的安装方式不同)


def access_pixels(img):
    """遍历图像每个像素的每个通道"""
    print(img.shape)              #打印图像的高,宽,通道数(返回一个3元素的tuple)
    height = img.shape[0]        #将tuple中的元素取出,赋值给height,width,channels
    width = img.shape[1]
    channels = img.shape[2]
    print("height:%s,width:%s,channels:%s" % (height,width,channels))
    print(img.size)              #打印图像数组内总的元素数目(总数=高X宽X通道数)
    for row in range(height):    #遍历每一行
        for col in range(width): #遍历每一列
            for channel in range(channels):    #遍历每个通道(三个通道分别是BGR)
                img[row][col][channel] = 255 - img[row][col][channel] 
                #通过数组索引访问该元素,并作出处理
    cv2.imshow("processed img",img) #将处理后的图像显示出来

#上述自定义函数的功能是像素取反,当然,opencv自带像素取反方法bitwise_not(),不需要这么麻烦
def inverse(img):
    """此函数与access_pixels函数功能一样"""
    dst = cv2.bitwise_not(img)
    cv2.imshow("inversed_img",dst)


def create_img():
    """#创建一张三通道图像"""
    img = np.zeros([600,800,3],dtype=np.uint8)
    #创建高600像素,宽800像素,每个像素有BGR三通道的数组(图像)
    #由于元素都在0~255之内,规定数组元素类型为uint8已足够
    img[:,:,2] = np.ones([600,800])*255
    #img[:,:,2]是一种切片方式,冒号表示该维度从头到尾全部切片取出
    #所以img[:,:,2]表示切片取出所有行,所有列的第三个通道(索引为2)
    #右侧首先创建了一个600X800的二维数组,所有元素初始化为1,再乘上255,即所有元素变为255
    #注意右侧600X800的二维数组与左侧切片部分形状相同,所以可以赋值
    #即所有行,所有列的第三个通道(R)的值都变为255,一二通道(BG)仍为0,即所有像素变为红色BGR(0,0,255)
    cv2.imshow("created_img",img)


def create_img_1():
    """创建一张单通道图像"""       
    img = np.zeros([400,400,1],dtype=np.uint8)
    #高400像素,宽400像素,单通道
    #仍是三维数组,不过第三个维度长度为1,用来表示像素的灰度(0~255)
    img[:,:,0] = np.ones([400,400])*127
    #切片取出所有行所有列的第一个元素(索引为0),灰度元素,并赋值为127
    cv2.imshow("created_img1",img)



src = cv2.imread("Z.PNG")  #读取图像
t1 = cv2.getTickCount()    #记录下起始时刻
access_pixels(src)         #访问图像的每个元素并处理
create_img()               #通过numpy创建三通道彩色图
create_img_1()            #通过numpy创建单通道灰度图
t2 = cv2.getTickCount()   #记录下结束时刻
time = ((t2-t1)*1000)/cv2.getTickFrequency() #计算中间语句执行所耗时间,单位为ms
print("所耗时间:%s" % time)



cv2.waitKey(0)
cv2.destroyAllWindows()import numpy as np
from cv2 



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: