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. CVE-2013-4710 WebView addJavascriptInterface远程执行代码

    WebView是Android平台下的一个重要组件,通常用来在Activity中嵌入一个简单的浏览器,实现在线网页浏览的功能.比如下面代码实现访问Google页面: WebView webView = ...

  2. Cisco 综合配置(一)

    要求: 1.内网所有PC及服务器都能访问外网 2.外网通过公网地址 202.101.100.3 访问内网服务器的Telnet服务 配置: PC.服务器都配置好自己的IP和默认网关:192.168.1. ...

  3. pandas 的常用方法

    pandas的常用方法: 1.数据输入 2.数据查看 3.数据清洗 4.数据处理 5.数据提取 6.数据筛选 7.数据汇总 8.数据统计 9.数据输出 详情见: https://blog.csdn.n ...

  4. 关于MySQL 建表的一些建议

    由于在生产环境下,我们对MySQL数据库的操作通常是通过命令行进行操作,因此,建议建表的时候也手写MySQL语句(不建议用图形界面建表). 1.添加注释的格式 在编写MySQL语句时,我们通常会被要求 ...

  5. Windows下利用Chrome调试IOS设备页面

    本文介绍如何在 Windows 系统中连接 iOS设备 并对 Web 页面进行真机调试 必须前提 iOS设备.数据线 Node.js 环境 Chrome 浏览器 环境准备 安装Node环境 参考Nod ...

  6. Docker Data

    docker data 六.Docker存储 docker存储驱动storage driver(优先使用linux默认的storage driver,因为比较稳定) ubuntu:aufs,/var/ ...

  7. Grid Illumination

    2019-07-07 16:53:31 问题描述: 问题求解: 本题和n后问题很类似,所以最初的时候就直接套了n后的板子,MLE. public int[] gridIllumination(int ...

  8. mysql两表合并,对一列数据进行处理

    加班一时爽,一直加班~一直爽~  欢迎收看http://www.996.icu/ 今天弄了下MySQL中两表合并的并且要处理一列数据,这列数据原来都是小写字母,处理时将这列数据改成驼峰命名的~~ 基本 ...

  9. Hive的数据模型及各模块的应用场景

    Hive的数据模型   Hive数据模型.png 数据模型组成及应用场景 Hive的数据模型主要有:database.table.partition.bucket四部分: 数据模型之database ...

  10. Apache服务的主要目录和配置文件详解

    Apache服务的主要目录和配置文件详解 2014-01-14 19:05:14 标签:httpd配置文件详解 apache配置文件 httpd配置文件 apache文件目录 原创作品,允许转载,转载 ...