zoukankan      html  css  js  c++  java
  • 利用numpy实现多维数组操作图片

            1、上次介绍了一点点numpy的操作,今天我们来介绍它如何用多维数组操作图片,这之前我们要了解一下色彩是由blue ,green ,red 三种颜色混合而成,0:表示黑色 ,127:灰色 ,255:白色   ;接下来我们还是来看代码:

        

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 
     5 def access_piexls(image):
     6     print(image.shape)  #获取图像的形状大小
     7     height=image.shape[0] #图像的第一维度高度
     8     width=image.shape[1] #图像的第二维度宽度
     9     channels=image.shape[2] #图像的第三维度通道数
    10     print("height : %s , width :%s , channels: %s"%(height,width,channels))
    11     for row in range(height):
    12         for col in range(width):
    13             for c in range(channels):
    14                 pv=image[row,col,c] #一个三维数组,来获取每个维度的值
    15                 image[row,col,c]=255-pv  #修改它的颜色显示
    16     cv.imshow("hhhh",image)
    17 src=cv.imread("D:hh.JPG")   #blue green red 色彩通道,这是基本的色彩构成,后面会学到  0:表示黑色   255:表示白色
    18 
    19 cv.namedWindow('input image',0)
    20 cv.imshow('input image',src)
    21 t1=cv.getTickCount() #获取当前cpu转动的时间
    22  access_piexls(src)
    23 24 t2=cv.getTickCount()
    25 print("time : %s ms" %((t2-t1)/cv.getTickFrequency()*1000))  #计算走了多少秒
    26 cv.waitKey(-1)
    27 cv.destoryAllWindows()

     最终实现的效果如下(我们可以看到cpu 显示这这张修改后的照片时间是9秒左右,同时照片的颜色也被改变了):

         

      2、接下来我们我可以在这个基础上创建出一张新的照片来:

                  

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 
     5 def access_piexls(image):
     6     print(image.shape)  #获取图像的形状大小
     7     height=image.shape[0] #图像的第一维度高度
     8     width=image.shape[1] #图像的第二维度宽度
     9     channels=image.shape[2] #图像的第三维度通道数
    10     print("height : %s , width :%s , channels: %s"%(height,width,channels))
    11     for row in range(height):
    12         for col in range(width):
    13             for c in range(channels):
    14                 pv=image[row,col,c] #一个三维数组,来获取每个维度的值
    15                 image[row,col,c]=255-pv  #修改它的颜色显示
    16     cv.imshow("hhhh",image)
    17 def creat_image():
    18     img = np.zeros([400,400,3],np.uint8)  #全zeros时 创建一个图片,高为400,宽为400,三个色彩通道矩阵图像    类型为uint8,这个时候我们还没有对图片进行颜色改变
    19     cv.imshow("new_img", img)
    20 
    21 
    22 src=cv.imread("D:hh.JPG")   #blue green red 色彩通道,这是基本的色彩构成,后面会学到  0:表示黑色   255:表示白色
    23 
    24 cv.namedWindow('input image',0)
    25 cv.imshow('input image',src)
    26 t1=cv.getTickCount() #获取当前cpu转动的时间
    27 #access_piexls(src)
    28 creat_image()
    29 t2=cv.getTickCount()
    30 print("time : %s ms" %((t2-t1)/cv.getTickFrequency()*1000))  #计算走了多少秒
    31 cv.waitKey(-1)
    32 cv.destoryAllWindows()

    最终效果是一张黑色的照片:

           

       3、接下来我们把这张新建的黑色照片,对它进行颜色操作,把它改成blue,也就是对颜色第一颜色通道进行多维数组操作(当然你也可以对其两个颜色通道进行修改):

        

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 
     5 def access_piexls(image):
     6     print(image.shape)  #获取图像的形状大小
     7     height=image.shape[0] #图像的第一维度高度
     8     width=image.shape[1] #图像的第二维度宽度
     9     channels=image.shape[2] #图像的第三维度通道数
    10     print("height : %s , width :%s , channels: %s"%(height,width,channels))
    11     for row in range(height):
    12         for col in range(width):
    13             for c in range(channels):
    14                 pv=image[row,col,c] #一个三维数组,来获取每个维度的值
    15                 image[row,col,c]=255-pv  #修改它的颜色显示
    16     cv.imshow("hhhh",image)
    17 def creat_image():
    18     img = np.zeros([400,400,3],np.uint8)  #全zeros时 创建一个图片,高为400,宽为400,三个色彩通道矩阵图像    类型为uint8,这个时候我们还没有对图片进行颜色改变
    19     img[: , : , 0]=np.ones([400,400])*255  #修改第一通道的颜色为blue  对第一个颜色通道操作
    20     cv.imshow("new_img", img)
    21 
    22 
    23 src=cv.imread("D:hh.JPG")   #blue green red 色彩通道,这是基本的色彩构成,后面会学到  0:表示黑色   255:表示白色
    24 
    25 cv.namedWindow('input image',0)
    26 cv.imshow('input image',src)
    27 t1=cv.getTickCount() #获取当前cpu转动的时间
    28 #access_piexls(src)
    29 creat_image()
    30 t2=cv.getTickCount()
    31 print("time : %s ms" %((t2-t1)/cv.getTickFrequency()*1000))  #计算走了多少秒
    32 cv.waitKey(-1)
    33 cv.destoryAllWindows()

        

          4、单通道操作,更加简单:

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 def creat_image():
     5     img = np.ones([400,400,3],np.uint8)
     6     img=img * 0
     7     cv.imshow("new_img", img)
     8 
     9 cv.waitKey(-1)
    10 cv.destoryAllWindows()

     5、填充操作(当我们把创建的图片大小取小一点的话,我可以用fill(进行填充操作):

            

     1 import cv2 as cv
     2 import numpy as np
     3 
     4 def creat_image():
     5     m1 = np.ones([3,3],np.uint8)
     6     m1.fill(122)
     7     print(m1)
     8 
     9     m2=m1.reshape([1,9])  #把一行分为9列
    10     print(m2)
    11 
    12 
    13 
    14 
    15 
    16 src=cv.imread("D:hh.JPG")   #blue green red 色彩通道,这是基本的色彩构成,后面会学到  0:表示黑色   255:表示白色
    17 
    18 cv.namedWindow('input image',0)
    19 cv.imshow('input image',src)
    20 t1=cv.getTickCount() #获取当前cpu转动的时间
    21 #access_piexls(src)
    22 creat_image()
    23 t2=cv.getTickCount()
    24 print("time : %s ms" %((t2-t1)/cv.getTickFrequency()*1000))  #计算走了多少秒
    25 cv.waitKey(-1)
    26 cv.destoryAllWindows()

       6、接下来用bitwise_not()函数实现像素取反,这样操作后读取照片的时间就非常快了:

        

     1 import cv2 as cv
     2 import numpy as np
     3 #进行像素取反操作,可以使读取照片的速度加快
     4 
     5 def inverse(img):
     6     dst=cv.bitwise_not(img)
     7     cv.imshow("取反",dst)
     8 src=cv.imread("D:hh.JPG")   #blue green red 色彩通道,这是基本的色彩构成,后面会学到  0:表示黑色   255:表示白色
     9 
    10 cv.namedWindow('input image',0)
    11 cv.imshow('input image',src)
    12 t1=cv.getTickCount() #获取当前cpu转动的时间
    13 #access_piexls(src)
    14 inverse(src)
    15 t2=cv.getTickCount()
    16 print("time : %s ms" %((t2-t1)/cv.getTickFrequency()*1000))  #计算走了多少秒
    17 cv.waitKey(-1)
    18 cv.destoryAllWindows()

        以上就是今天所学的东西了,就分享到这里了,睡觉了,现在是凌晨12:36,。

  • 相关阅读:
    Codeforces Beta Round #92 (Div. 2 Only) B. Permutations 模拟
    POJ 3281 Dining 最大流 Dinic算法
    POJ 2441 Arrange the BUlls 状压DP
    URAL 1152 Faise Mirrors 状压DP 简单题
    URAL 1039 Anniversary Party 树形DP 水题
    URAL 1018 Binary Apple Tree 树形DP 好题 经典
    pytorch中的forward前向传播机制
    .data()与.detach()的区别
    Argparse模块
    pytorch代码调试工具
  • 原文地址:https://www.cnblogs.com/1121518wo/p/10804043.html
Copyright © 2011-2022 走看看