Python+OpenCV图像处理(三)—— Numpy数组操作图片
一.改变图片每个像素点每个通道的灰度值
(一)
代码如下:
#遍历访问图片每个像素点,并修改相应的RGB
import cv2 as cv
def access_pixels(image):
print(image.shape)
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
print("width: %s height: %s channels: %s"%(width, height, 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 #灰度值是0-255 这里是修改每个像素点每个通道灰度值
cv.imshow("second_image",image)
src=cv.imread('E:\imageload\example.png') #blue, green, red
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
t1 = cv.getTickCount() #GetTickcount函数返回从操作系统启动到当前所经过的毫秒数
access_pixels(src)
t2 = cv.getTickCount()
time = (t2-t1)/cv.getTickFrequency() #getTickFrequency函数返回CPU的频率,就是每秒的计时周期数
print("time : %s ms"%(time*1000) ) #输出运行时间
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:


注意:
1.image[i,j,c] i表示图片的行数,j表示图片的列数,c表示图片的通道数(0代表B,1代表G,2代表R 一共是RGB三通道)。坐标是从左上角开始
2.每个通道对应一个灰度值。灰度值概念:把白色与黑色之间按对数关系分成若干级,称为“灰度等级”。范围一般从0到255,白色为255,黑色为0。要详细了解灰度值和通道的概念,请参考这篇博客:https://blog.csdn.net/silence2015/article/details/53789748
(二)
上述代码实现像素取反的运行时间较长,下面代码运用opencv自带的库函数可以使运行时间大大减少。
代码如下:
#调用opencv的库函数快速实现像素取反
import cv2 as cv
def inverse(img):
img = cv.bitwise_not(img) #函数cv.bitwise_not可以实现像素点各通道值取反
cv.imshow("second_image", img) src=cv.imread('E:\imageload\example.png') #blue, green, red
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
t1 = cv.getTickCount() #GetTickcount函数返回从操作系统启动到当前所经过的毫秒数
inverse(src)
t2 = cv.getTickCount()
time = (t2-t1)/cv.getTickFrequency() #getTickFrequency函数返回CPU的频率,就是每秒的计时周期数
print("time : %s ms"%(time*1000) ) #输出运行时间
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:

可见,使用库函数 bitwise_not 可以使运行时间缩短13倍左右
二.自定义一张三通道图片
代码如下:
#自定义一张三通道图片
import cv2 as cv
import numpy as np
def creat_image():
img = np.zeros([400, 400, 3], np.uint8) #将所有像素点的各通道数值赋0
img[:, :, 0] = np.ones([400, 400]) * 255 #0通道代表B
# img[:, :, 1] = np.ones([400, 400]) * 255 #1通道代表G
# img[:, :, 2] = np.ones([400, 400]) * 255 #2通道代表R
cv.imshow("new_image",img)
creat_image()
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
注意:
1.np.zeros函数用于创建一个数值全为0的矩阵,np.ones用于创建一个数值全为1的矩阵
2.当图片为多通道图片时,B:255 G:0 R:0 则三通道图片显示蓝色。所有通道数值组合示意图如下:

补注:
单通道: 此通道上值为0-255。 (255为白色,0是黑色) 只能表示灰度,不能表示彩色。
三通道:BGR (255,255,255为白色, 0,0,0是黑色 ) 可以表示彩色, 灰度也是彩色的一种。
单通道和三通道区别见博客:https://blog.csdn.net/qq_32211827/article/details/56854985
三、自定义一张单通道图片
代码如下:
#自定义一张单通道图片
import cv2 as cv
import numpy as np
def creat_image():
img = np.ones([400, 400, 1], np.uint8) #该像素点只有一个通道,该函数使所有像素点的通道的灰度值为1
img = img * 127 #使每个像素点单通道的灰度值变为127
cv.imshow("new_image",img)
creat_image()
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:

注意:
1.代码里 img = img * 127 表示数组里的每个数值都乘以127
2.之所以np.ones函数参数类型是uint8,是因为uint8数的范围为0~255, 那么为0时恰好为黑色,为255时恰好为白色。若函数参数类型为int8,则int8类型数的范围为-128~127,那么-128则为黑色,127为白色
Python+OpenCV图像处理(三)—— Numpy数组操作图片的更多相关文章
- Python+OpenCV图像处理(二)——打印图片属性、设置图片存储路径、电脑摄像头的调取和显示
一. 打印图片属性.设置图片存储路径 代码如下: #打印图片的属性.保存图片位置 import cv2 as cv import numpy as np #numpy是一个开源的Python科学计算库 ...
- 利用numpy实现多维数组操作图片
1.上次介绍了一点点numpy的操作,今天我们来介绍它如何用多维数组操作图片,这之前我们要了解一下色彩是由blue ,green ,red 三种颜色混合而成,0:表示黑色 ,127:灰色 ,255:白 ...
- python skimage图像处理(三)
python skimage图像处理(三) This blog is from: https://www.jianshu.com/p/7693222523c0 霍夫线变换 在图片处理中,霍夫变换主要 ...
- Python+OpenCV图像处理(一)
Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...
- Python+OpenCV图像处理(一)——读取显示一张图片
先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...
- Numpy 数组操作
Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...
- Numpy数组操作
""" Numpy 数组操作 修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做 ...
- Python数据分析工具库-Numpy 数组支持库(一)
1 Numpy数组 在Python中有类似数组功能的数据结构,比如list,但在数据量大时,list的运行速度便不尽如意,Numpy(Numerical Python)提供了真正的数组功能,以及对数据 ...
- python numpy数组操作
数组的创建 import numpy as np arr1 = np.array([3,10,8,7,34,11,28,72]) arr2 = np.array(((8.5,6,4.1,2,0.7), ...
随机推荐
- 使用python实现日志功能
Python脚本日志系统 Python通过logging模块提供日志功能,关于logging模块的使用网络上已经有很多详细的资料,这里要分享的是怎样在实际工程中使用日志功能. 假设要开发一个自动化 ...
- 004-mac上安装以及Nginx 配置文件nginx.conf详解
1.mac上nginx安装 安装brew:go-001-环境部署,IDEA插件 安装nginx: brew search nginx brew install nginx 当然也可以编译安装 安装完以 ...
- XML 文档(1, 2)中有错误:不应有 <xml xmlns=''>
症状 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息, ...
- eclipse卡,相关优化配置
配置eclipse.ini文件 -vmargs -Xms1024m-Xmx3072m-Dfile.encoding=UTF-8 该行设置编码 启动卡window--preferences搜索s ...
- eclipse中安装XML editor Rinzo
eclipse中安装XML editor Rinzo 1. 较高版本的eclipse可以通过 Help--Market 搜索 Rinzo,然后安装 2. 第1种方法如果不行,尝试下面的方法 (1)从 ...
- java实现的加密解密
void encode(File enfile, File defile) throws Exception { String Algorithm = "DES"; byte[] ...
- 对于jquery实现原理的浅谈
关键词:prototype(原型).它能让javascript的方法(也可看成:类)能够动态地追加方法(猜测:目的是为了代码实现引入“类的思想”) 废话少说,代码见真义. <html> & ...
- 16个PHP设计模式详解
说明:该教程全部截选自实验楼教程[16个PHP设计模式详解]:主要介绍16个常用的设计模式的基础概念和技术要点,通过UML类图帮助理解设计模式中各个类之间的关联关系,针对每种设计模式都使用PHP完成了 ...
- Linux 中的 tar
tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...
- sparse.coo_matrix()
coo_matrix.tocsr(copy = False ) 将此矩阵转换为压缩稀疏行格式,重复的条目将汇总在一起. 举例: from numpy import array from scipy.s ...