zoukankan      html  css  js  c++  java
  • 图片像素取反和numpy数组操作

    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()
    
    
    
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    CDQ分治
    2-sat
    整体二分
    apache性能优化
    apache反向代理出现502调整
    hadoop学习笔记肆--元数据管理机制
    ssh 免密码登录配置,及其原理
    extjs 中的一些鲜为人知的属性(深渊巨坑)
    hadoop学习笔记叁--简单应用
    hadoop学习笔记贰 --HDFS及YARN的启动
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15129497.html
Copyright © 2011-2022 走看看