一:对头像的所有像素进行访问,并UI图像进行像素取反

(一)for循环取反

import cv2 as cv
import numpy as np def access_pixels(image): #对图像的所有像素进行访问
print(image.size)
height,width,channel = image.shape #每个像素3个通道,通道顺序b,g,r
print("height:%s\r\nwidth:%s\r\nchannel:%s\r\n"%(height,width,channel))
'''
height:
width:
channel:
'''
for row in range(height):
for col in range(width):
for c in range(channel): #循环会变慢,经过625632循环
pv = image[row,col,c]
image[row,col,c] = 255 - pv  #像素取反
cv.imshow("pixels_demo",image) src = cv.imread("./1.png") #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("input image",src) #通过名字将图像和窗口联系
t1 = cv.getTickCount() #获取时间,用于精度计时,操作系统启动所经过(elapsed)的毫秒数
access_pixels(src)
t2 = cv.getTickCount()
print((t2-t1)/cv.getTickFrequency()) #getTickFrequency()是获取一秒钟结果的点数,获取秒数
cv.waitKey() #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口
height:
width:
channel: 15.740029368334588  #经历了15秒,是十分耗时的循环,我们可以使用Numpy数组访问,更加方便快捷

(二)使用内置方法取反(直接使用c代码执行,效率更高)

def inverse(image):
img = cv.bitwise_not(image)
cv.imshow("inverse image",img)
t1 = cv.getTickCount()  #获取时间,用于精度计时,操作系统启动所经过(elapsed)的毫秒数
inverse(src)
t2 = cv.getTickCount()
0.09940230583146789

二:使用Numpy数组,创建图片

(一)使用多个信道创建图片

def create_img():
img = np.zeros([400,400,3],np.uint8) #创建一个三维数组高400,宽400,信号通道3个,初始都为0,每通道占8位个
img[:,:,
0] = np.ones([400,400])*255 #将0号通道下[400,400]面积使用ones设置为1,之后乘以255,将其设置为255,注意:3个信道分别是b,g,r所以这里显示为蓝色 cv.imshow("new image",img) create_img()
cv.waitKey() #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口

(二)使用单个信道创建图像(灰度图像)

def create_img():
img = np.zeros([400,400,1],np.uint8)  #创建一个只有一个信道的三维数组,初始为0
img[:,:,0] = np.ones([400,400])*127  #修改这个图像的信道为127,灰色
cv.imshow("new image",img)

或者(所以初始时候使用ones会更加灵活)

def create_img():
img = np.ones([,,],np.uint8)  #创建一个只有一个信道的三维数组,初始为1
img = img * 127  #可以直接进行运算 cv.imshow("new image",img)
cv.imwrite(".3.png",img)  #可以进行保存

三:补充Numpy的使用

(一)二维数组的使用(选择正确的类型)

1.float类型

def create_arr():
ml = np.ones([,],np.float32)  #float类型,允许小数存在
ml.fill(122.388)
print(ml) create_arr()
[[122.388 122.388 122.388]
[122.388 122.388 122.388]
[122.388 122.388 122.388]]

2.int类型

def create_arr():
ml = np.ones([,],np.uint8)  #不允许小数的存在,且有最大是255
ml.fill(122.388)
print(ml) create_arr()
[[  ]
[ ]
[ ]]
def create_arr():
ml = np.ones([3,3],np.uint8)  #有位数限制,高位被截断了,低位留下了
ml.fill(256.388)
print(ml) create_arr()
[[  ]
[ ]
[ ]]

(二)维数转换reshape

def create_arr():
ml = np.ones([,],np.uint8)
ml.fill(122.388)
m2 = ml.reshape([,])  #注意:转换维度,数组大小还是要一致的,不然报错
print(m2)
[[        ]]

(三)使用array自定义数组

def create_arr():
m3 = np.array([[,,],[,,],[,,]],np.uint8)
print(m3)
[[  ]
[ ]
[ ]]

OpenCV---Numpy数组的使用以及创建图片的更多相关文章

  1. numpy数组的创建

    创建数组 创建ndarray 创建数组最简单的方法就是使用array函数.它接收一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组. array函数创建数组 import ...

  2. numpy 数组创建例程

    1 numpy.empty empty(shape[, dtype=float, order='C']) 创建指定 shape 和dtype 的未初始化数组 返回:ndarray. 说明:order ...

  3. NumPy数组创建例程

    NumPy - 数组创建例程 新的ndarray对象可以通过任何下列数组创建例程或使用低级ndarray构造函数构造. numpy.empty 它创建指定形状和dtype的未初始化数组. 它使用以下构 ...

  4. NumPy 基于已有数据创建数组

    原文:Python Numpy 教程 章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基 ...

  5. NumPy 数组创建

    章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切 ...

  6. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化

    一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...

  7. numpy数组、向量、矩阵运算

    可以来我的Github看原文,欢迎交流. https://github.com/AsuraDong/Blog/blob/master/Articles/%E6%9C%BA%E5%99%A8%E5%AD ...

  8. Python图像处理丨OpenCV+Numpy库读取与修改像素

    摘要:本篇文章主要讲解 OpenCV+Numpy 图像处理基础知识,包括读取像素和修改像素. 本文分享自华为云社区<[Python图像处理] 二.OpenCV+Numpy库读取与修改像素> ...

  9. numpy数组的操作

    numpy - 介绍.基本数据类型.多维数组ndarray及其内建函数 http://blog.csdn.net/pipisorry/article/details/22107553 http://w ...

随机推荐

  1. presto——java.sql.SQLException: Error executing query与javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?异常问题

    使用presto的时候以mysql为presto的数据源 安装的presto是0.95版本:使用的presto-jdbc是0.202的,这里使用jdbc去访问时候,connection可以链接成功,但 ...

  2. es6 babel编译

    本文主要参照阮一峰的es6入门,为提高自己写了一份随笔. 原文地址请戳这里  ECMAScript 6 入门 ECMAScript 6是JavaScript语言的下一代标准.因为当前版本的ES6是在2 ...

  3. 02慕课网《进击Node.js基础(一)》——CommonJs标准

    是一套规范管理模块 每个js 为一个模块,多个模块作为一个包 node.js和Couchdb是对其的实现: 不同于jQuery 模块:定义.标识.引用(地址/模块名称) 模块类型: 核心模块http ...

  4. uc浏览器的用户体验

    用户界面: 我认为,uc浏览器的用户界面还是很招人喜欢的,可以很容易让用户找到自己想看的网页.简单快捷. 记住用户的选择: uc在每次用户访问完网站之后都会记住用户访问的高频网站,以便下次用户可以更好 ...

  5. MyEclipse快捷方式

    选择你要注释的那一行或多行代码,按Ctrl+/即可,取消注释也是选中之后按Ctrl+/即可. 如果你想使用的快捷键的注释是的话,那么你的快捷键是ctrl+shift+/我以前都是手动注释的,直接打// ...

  6. 0429团队项目-Scrum团队成立

    Scrum团队成立 团队名称:开拓者 团队目标:努力让每一个小伙伴在学会走路的基础上学会跑. 团队口号:我们要的只是这片天而已. 团队照:正面照+背影照(那就是为什么组名叫开拓者) 5.2 角色分配 ...

  7. 2nd 词频统计效能测试

    词频统计效能测试 使用性能分析工具分析结果如下 :

  8. chrome调试selenium。其实我是无聊了

    from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com" ...

  9. 集合里面的 E是泛型 暂且认为是object

    集合里面的 E是泛型 暂且认为是object

  10. 【Mybatis】简单的mybatis增删改查模板

    简单的mybatis增删改查模板: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE map ...