1. 转换为灰度图

灰度图的数据可以看成是二维数组,元素取值为0 ~ 255,其中,0为黑色,255为白色。从0到255逐渐由暗色变为亮色。

灰度图转换(ITU-R 601-2亮度变换):

L = R * 299 / 1000 + G * 587 / 1000 + B * 114 / 1000

R,G,B为最低维的数据。

显示灰度图时,需要在imshow中使用参数:

cmap="gray"

import numpy as np
import cv2
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

def get_color_channels(img):
img = img.copy()
channels_num = len(img.shape)
result = [] channels = np.split(img, channels_num, axis=2)
for i in channels:
result.append(i.sum(axis=2))
return result # 其实没必要这么麻烦,只需要return img[:,:,0], img[:,:,1], img[:,:,2]即可
# img = cv2.imread('/home/geoffrey/图片/小熊猫.png') # opencv返回BGR,需要转换颜色通道
img = Image.open('/home/geoffrey/图片/小熊猫.jpeg')
img = np.array(img)
# img.transpose(0,1,2)
plt.imshow(img)
plt.show()

img.shape
(559, 700, 3)

分离通道

R, G, B, = get_color_channels(img)
R.shape
(559, 700)

生成白色图片,每个像素都是1.0

w = np.ones((500,500,3)) # 由于默认np.float64类型,对浮点数取比例,即1.0,对应整形255。
plt.imshow(w)
plt.show()

生成黑色图片,每个像素都是0, 方法1

w = np.zeros(shape=(500,500,3), dtype=np.uint8)
plt.imshow(w)
plt.show()

生成自定义颜色图片

w = np.full(shape=(500,500,3), fill_value=125 , dtype=np.uint8)
w[:] = [0,238,225] # 广播操作
plt.imshow(w)
plt.show()

转换为灰度图像方法1:

L = R * 299 / 1000 + G * 587 / 1000 + B * 114 / 1000
plt.imshow(L, cmap="gray")
plt.show()

转换为灰度图像方法2,点积:

temp = np.array([ 0.299,  0.587, 0.114])
plt.imshow(img@temp, cmap="gray")
plt.show()

2. 转置

plt.imshow(L.T, cmap="gray")
plt.show()

3. 画出三个通道的彩图

B_img = img.copy()
B_img[:,:, [0,1]]=0 R_img = img.copy()
R_img[:,:, [0,2]]=0 G_img = img.copy()
G_img[:,:, [2,1]]=0 fig,ax = plt.subplots(2,2) ax[0,0].imshow(img)
ax[1,1].imshow(R_img)
ax[1,0].imshow(G_img)
ax[0,1].imshow(B_img)
fig.set_size_inches(15, 15)
plt.tight_layout()
plt.show()

4. 图像扩展

t1 = np.concatenate((img, img, img), axis=1) # 横向拼接
t2 = np.concatenate((t1, t1), axis=0) plt.imshow(t2)
plt.show()

5. 水平镜像 --- 交换行

mirrow_img_x = img[::-1]
plt.imshow(mirrow_img_x)
plt.show()

6. 水平翻转 --- 交换列

mirrow_img_y = img[:,::-1]
plt.imshow(mirrow_img_y)
plt.show()

7. 调换x,y坐标

plt.imshow(img.transpose(1,0,2))
plt.show()

plt.imshow(img.transpose(1,0,2)[::-1])
plt.show()

8. 添加mask

k = np.random.randint(0, 256, size=(200, 200, 3), dtype=np.uint8)
test = img.copy()
test[300:500,400:600] = k
plt.imshow(test)
plt.show()

9. 随机打乱顺序

t = img.copy()
height=t.shape[0] li = np.split(t, range(100, height, 30), axis=0)
np.random.shuffle(li)
t = np.concatenate(li, axis=0)
plt.imshow(t)
plt.show()

10. 交换通道

t = img.copy()

plt.imshow(t[:,:,[2,0,1]])
plt.show()

test = img[:, :, [2,1,0]]
plt.imshow(test)
plt.show()

numpy 用于图像处理的更多相关文章

  1. Numpy用于数组的文件输入输出

    这一章比较简单,内容也比较少.而且对于文件的读写,还是使用pandas比较好.numpy主要是读写文本数据和二进制数据的. 将数组以二进制的格式保存到硬盘上 主要的函数有numpy.save和nump ...

  2. Numpy用于数组数据的存储和读取

    Python的Numpy模块可用于存储和读取数据: 1.将一个数组存储为二进制文件 Numpy.save:将一个数组以.npy的格式保存为二进制文件 调用格式:numpy.save(file, arr ...

  3. Numpy 用于数组的文件输入和输出

    将数组以二进制格式保存 np.save 和np.load 是读写磁盘数组数据的两个主要函数.默认情况下,数组是以未压缩的原始二进制格式进行保持在扩展名 为.npy的文件中的 如果文件路径末尾没有扩展名 ...

  4. scikit-image 图像处理库介绍

    今天学习图像处理的时候,无意中看到了scikit 软件包,抱着学习的态度,这里做个记录,方便以后翻阅. 概念:scikit-image 是一种开源的用于图像处理的 Python 包.它包括分割,几何变 ...

  5. Python10个图像处理工具

    原文地址:https://cloud.tencent.com/developer/article/1498116 译者 | 小韩 来源 | towardsdatascience [磐创AI导读]:本篇 ...

  6. Python中的十大图像处理工具

    转自:微信博客 机器学习研究会订阅号 微信号 功能介绍机器学习研究会由百度七剑客雷鸣先生创办,旨在推动AI的技术发展和产业落地.参与组织北大.清华”AI前沿与产业趋势“公开课,广泛的和高校.企业.创业 ...

  7. 十个python图像处理工具

    介绍 如今的世界存在了大量的数据,图像数据是重要的组成部分.如果要利用这些图片,需要对图像进行处理,提高图片质量或提取图片内容信息. 图像处理的常见操作包括图像显示,基本操作如裁剪,翻转,旋转等,图像 ...

  8. Python下的图像处理库,你选哪个?

    奥里给~ 转载:https://blog.csdn.net/chen801090/article/details/105795068/ 在进行数字图像处理时,我们经常需要对图像进行读取.保存.缩放.裁 ...

  9. 图像处理中的matlab使用

    图像的矩阵表示 类和图像类型 虽然使用的是整数坐标, 但 MATLAB 中的像素值(亮度)并未限制为整数. 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类. 表中的前 8 ...

随机推荐

  1. Confluence 6 连接到 Jira 用户管理的建议

    建议 如果下面所有的选项都为是的话: JIRA 应用程序不在高负载下运行. 你仅仅希望在一些不多的应用中跨平台管理你的用户和用户组,例如一个 JIRA 软件服务器和 Confluence 服务器,或者 ...

  2. spark中RDD的转化操作和行动操作

    本文主要是讲解spark里RDD的基础操作.RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当 ...

  3. NIO(四)

    使用非直接缓冲区和直接缓冲区复制同一个文件,看一下时间差别 1.创建非直接缓冲区测试类 package com.cppdy.nio; import java.io.FileInputStream; i ...

  4. js获取url参数值,并解决中文乱码

    <script type="text/javascript"> function GetQueryString(name) { var reg = new RegExp ...

  5. SpringMVC环境搭建

    Spring MVC为展现层提供的基于MVC设计理念的优秀Web框架,是目前最主流的MVC框架之一. Spring 3.0之后完全超越Struts2,称为最优秀的MVC框架.学完SpringMVC之后 ...

  6. noip 2018游记

    憋了好久的游记... 考虑到写游记是oi界的传统,所以还是应该写一篇的. day0: 上午9:30的火车出发,车上颓三国杀! 中午12:00到了大连,下午2:00才开始试机,还是得先去大连大学,在食堂 ...

  7. resources中添加配置文件

  8. 关于HTML或JS加密解密的七种方式

    本文一共介绍了七种方法:   一:最简单的加密解密   二:转义字符""的妙用   三:使用Microsoft出品的脚本编码器Script Encoder来进行编码    (自创简 ...

  9. 一脸懵逼学习oracle

    oracle的默认用户:system,sys,scott: 1:查看登录的用户名:show user: 2:查看数据字典:dba_users; 3:创建新用户 (1)要连接到Oracle数据库,就需要 ...

  10. linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号

    1:linux操作系统 netstat 命令用于显示各种网络相关信息,即网络状态.而我主要使用netstat查看端口号是否启动: 参数详情: 1 -a (all)显示所有选项,默认不显示LISTEN相 ...