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

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

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

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

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

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

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

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

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

 import cv2 as cv
import numpy as np def creat_image():
img = np.ones([400,400,3],np.uint8)
img=img * 0
cv.imshow("new_img", img) cv.waitKey(-1)
cv.destoryAllWindows()

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

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

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

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

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

利用numpy实现多维数组操作图片的更多相关文章

  1. Python数据分析 | Numpy与1维数组操作

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/33 本文地址:http://www.showmeai.tech/article-det ...

  2. NumPy之:ndarray多维数组操作

    NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...

  3. Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】

    目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...

  4. matlab学习笔记11_1低维数组操作

    一起来学matlab-matlab学习笔记11 11_1 低维数组操作repmat函数,cat函数,diag函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab ...

  5. 初识numpy的多维数组对象ndarray

    PS:内容来源于<利用Python进行数据分析> 一.创建ndarray 1.array :将一个序列(嵌套序列)转换为一个数组(多维数组) In[2]: import numpy as ...

  6. python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...

  7. 什么是二维数组?二维遍历?Java二维数组制作图片迷宫 使用如鹏游戏引擎制作窗口界面 附带压缩包下载,解压后双击start.bat启动

    什么是二维数组? 数组当中放的还是数组 int [][] arr=new int[3][2]; 有3个小箱子,每个箱子2个格子. 看结果? int [][] arr=new int[3][2]; Sy ...

  8. numpy中多维数组的绝对索引

    这涉及到吧多维数组映射为一维数组. 对于3维数组,有公式: def MAP(x,y,z): return y_s * z_s * x + z_s * y + z 此公式可以推广到N维 测试代码:(两个 ...

  9. 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作

    二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...

随机推荐

  1. Nvue/Weex

    Nvue/Weex 使用Uniapp做了一个App,感觉性能不是很好,了解过Uniapp的Nvue,就想做一个纯Nvue项目,其实基本就是做一个Weex项目,不得不说坑是真的多,但是渲染性能真的是没得 ...

  2. hdu3368 dfs 下棋

    两颗黑子之间的白子可以翻装成黑子,两颗白子之间的黑子可以翻转成白子,对于一个给定位置,有八个方向有翻转其他颜色的子的可能.规则之一是下棋的位置一定要能翻转对方的子. 求最优情况:黑子能翻转的白子个数的 ...

  3. hdu1728 逃离迷宫bfs

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1728/ 关于广度优先搜索的第一篇题解.广度优先搜索,就是状态树的层次遍历,一层一层的搜索,直到搜索到目标状态为止 ...

  4. 基础的Linux命令(二)

    本文介绍两大类命令,都是最基础的部分 系统状态监测命令 工作目录切换命令 一.系统状态监测命令 1. ifconfig 命令 用于获取网卡配置与网络状态等信息 如下图:inet后面是 IP 地址,et ...

  5. 【笔记3-31】Python语言基础-字典dict

    创建字典 dict1 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'} dict2 = dict(k1='v1', k2='v2', k3='v3' ...

  6. mysql打开general log的办法

    mysql打开general log的办法   mysql打开general log之后,所有的查询语句都可以在general log 文件中以可读的方式得到,但是这样general log文件会非常 ...

  7. HTML5调用笔记本或手机摄像头

    网上找了些文章测试了下,到现在为止还是很多浏览器不支持,所以也没有什么实用价值啊. 以下代码在笔记本电脑浏览器chrome25,irefox19上测试通过(FF需要在地址栏输入about:config ...

  8. Hive学习笔记六

    目录 查询 一.基本查询 1.全表和特定列查询 2.列别名 3.算术运算符 4.常用函数 5.Limit语句 二.Where语句 1.比较运算符(Between/In/ Is Null) 2.Like ...

  9. PMP学习笔记(一)

    前9节列举出了很多例子来辅助理解什么是项目管理,在学习的过程当中听到了一些名词,查询过一些资料之后,在这里梳理出来 1.关键路径法 关键路径是指设计中从输入到输出经过的延时最长的逻辑路径.优化关键路径 ...

  10. Math对象常用方法介绍

     <script>         /* 001-Math.abs()  绝对值 */         console.log(Math.abs(123), Math.abs(-998), ...