import cv2 as cv
import numpy as np
# 数组操作
def access_pixlex(image):
print('返回一个元组',image.shape)
height = image.shape[0]
width = image.shape[1]
channel = image.shape[2] # 3原色,所以是3
# 打印输出,这里用format
print("{0},height:{1},channel:{2}".format(width,height,channel))
# 遍历每个像素点值,并对像素值进行修改
# for循环遍历修改很耗时
for row in range(height):
for col in range(width):
for c in range(channel):
pv = image[row,col,c]
image[row,col,c] = 255 - pv
# 展示修改后的图片
cv.imshow("modification",image)
def creat_image():
#zeros:double类零矩阵
# 创建400*400 3个通道的矩阵图像 参数时classname为uint8
img = np.zeros([400,400,3],np.uint8)
# 第一个通道blue 所以展示的是蓝色
img[:,:,0] = np.ones([400,400])*255#ones([400, 400])是创建一个400*400的全1矩阵,*255即是全255矩阵 并将这个矩阵的值赋给img的第一维
# 第二个通道green 所以展示的是绿色
img[:,:,1] = np.ones([400,400])*255 # 第二维全是255
# 第三个通道red 所以展示的是红色
img[:,:,2] = np.ones([400,400])*255 # 第三维全是255
# 此处是展示了三通道合并后的图片,也就是白色,若想展示第一通道的蓝色,则应将第二三通道的代码注释
cv.imshow("new image",img)# #输出一张400*400的白色图片(255 255 255):蓝(B)、绿(G)、红(R)
# numpy的操作实例
def numpy_demo():
# 创建一个三行三列浮点型数组
m1 = np.ones([3,3],np.float)
# 将m1中的值全部用1222.454替换
m1.fill(1222.454)
print('三行三列浮点型数组',m1)
# 将m1转化为一行九列
m2 = m1.reshape([1,9])
print("reshape函数转化为一行九列",m2)
# 像素取反
def inverse(image):
dst = cv.bitwise_not(image)
cv.imshow("inverse",dst)
if __name__ == "__main__":
'''
调用函数access_pixles()部分代码
'''
# 读取图片
src = cv.imread("pic/bizhi.jpg")
# 创建窗口,用来显示图片
# cv.WINDOW_NORMAL | namedWindow
cv.namedWindow('input_image',cv.WINDOW_NORMAL)
# 展示读取的图片
cv.imshow('input_image',src)
# 毫秒级别的计时函数,记录了系统启动以来的时间毫秒
t1 = cv.getTickCount()
# 调用函数
print('调用函数 access_pixlex了')
access_pixlex(src)
t2 = cv.getTickCount()
# getTickFrequency用于返回CPU的频率,就是每秒的计时周期数
time = (t2-t1) * 1000 / cv.getTickFrequency()
print('time :{}'.format(time))
# waitkey窗口显示时间,毫秒,k=0,一直显示,键盘上按个数字键,就会消
cv.waitKey(0)
# 删除建立的全部窗口,释放资源
cv.destroyAllWindows()
'''
调用函数create_image()部分代码
'''
# creat_image()
# cv.waitKey(0)
# cv.destroyAllWindows()
'''
调用函数numpy_demo()部分代码
'''
numpy_demo()
'''
调用库函数实现取反,这里access_pixles()实现的也是取反,
但是使用库函数取反快很多
'''
# blue green red 三个通道
# src = cv.imread("pic/bizhi.jpg")
# t1 = cv.getTickCount()
# inverse(src) # inverse取反库函数
# t2 = cv.getTickCount()
# time = (t2-t1)*1000/cv.getTickFrequency()
# print('time:%s'%time)
# cv.waitKey(0)
# cv.destroyAllWindows()