目录

numpy 用于图像处理

1. 转换为灰度图

2. 转置

3. 画出三个通道的彩图

4. 图像扩展

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

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

7. 调换x,y坐标

8. 添加mask

9. 随机打乱顺序

10. 交换通道


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 npdef 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]]=0R_img = img.copy()
R_img[:,:, [0,2]]=0G_img = img.copy()
G_img[:,:, [2,1]]=0fig,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 用于图像处理(灰度图、转置、通道分离、图像扩展、水平镜像、水平翻转、调换x,y坐标、添加mask、随机打乱顺序、交换通道)相关推荐

  1. 数字图像处理--灰度图转伪彩色图

    开篇废话 观察了一下冈萨雷斯的书,发现彩色图像处理仅仅用了一章进行介绍,原因分析了一下,后来发现,好像别的介绍的也不多,得出一个结论.冈萨雷斯这本书仅仅能作为一部纲领性的介绍.它基本涵盖了图像处理的基 ...

  2. html 图像处理 灰度图和浮雕图类PS

    html5 的canvas还有一些很酷炫的效果,接下来讲的是canvas对像素的处理,虽然略有些复杂,但实现出的效果,还是很赞的~~. 为了不让大家失望,先强调一句:下列效果需调用getImageDa ...

  3. python 灰度图转矩阵_图像转换矩阵

    一.Python pillow模块 pip install pillow 二.使用 from PIL import Image import numpy as np def loadImage(): ...

  4. 数字图像处理(五)几何变换之图像平移、镜像、绕中心点旋转、缩放等

    本文为参考这位https://blog.csdn.net/eastmount/article/details/46345299所做的一些笔记,文字部分复制粘贴,代码部分有所改进,增加了绕中心点旋转等 ...

  5. matlab灰度图孔洞填充,OpenCV图像内轮廓填-孔洞填充

    //test #include "stdafx.h" #include "cxcore.h" #include "cv.h" #includ ...

  6. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

  7. OpenCV3学习(2.4)——彩色图像读取、灰度图转化、RGB通道分割与合并

    下列代码涉及到: 1.彩色图像的读取,图像翻转,转换为灰度图: 2.对彩色图像的RGB三通道进行切分与合并: 涉及到的函数如下: 1.图像的反转采用flip函数实现,该函数能够实现图像在水平方向,垂直 ...

  8. 单通道图片转换为3通道图片,实现灰度图上添加彩色标注

    对于纯粹的单通道图片(灰度图)利用opencv是无法在图片上附加彩色标注的,这时就需要将单通道图片转换为三通道图片才行.由于图片中没有另外两个通道的数据,因此直接将已有的数据给另外两个通道就行. 注意 ...

  9. OpenGL 灰度图

    目录 一.OpenGL 灰度图 1.IOS Object-C 版本 1.Windows OpenGL ES 版本 2.Windows OpenGL 版本 二.OpenGL 灰度图 GLSL Shade ...

最新文章

  1. mysql被拖垮_说几个拖垮系统的小细节!
  2. python gridfs_python 将图片存入mongodb,读取图片,gridfs模块
  3. ML大杂烩:**常见机器学习算法公式梳理
  4. java学习之路--面试之多线程基础
  5. linux之cat命令详解
  6. 数1的个数(信息学奥赛一本通-T1095)
  7. Ubuntu命令行和图形界面选择设置
  8. leaflet自定标签json_Windows Terminal更新后,自定义配置失效?快捷键无法使用?
  9. tiny core linux 7.1,极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布
  10. mysql 判断指定条件数据存不存在,不存在则插入
  11. Raki的读paper小记:NATURAL LANGUAGE INFERENCE OVER INTERACTION SPACE
  12. 奇瑞新能源硬实力 全铝车身奇瑞大蚂蚁
  13. 单极性非归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真
  14. 基于系统性风险角度的基金资产配置策略分析
  15. CTFSHOW 愚人节欢乐赛WP
  16. Clojure学习笔记(一)——介绍、安装和语法
  17. 360 ie8兼容模式 网页兼容问题
  18. java电子配件公司仓库管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  19. Eclipse运行jsp文件,发现页面无法访问!
  20. sql之浅谈视图的作用

热门文章

  1. java 二进制置位,重置
  2. 学习笔记---将Asp.Net网站发布到IIS的四种方法及注意事项
  3. 在装完Linux系统之后自己去修改Swap分区的大小(两种方法)
  4. 如何对数据目标进行分析
  5. JavaScript 自定义对象 及 new()原理与实现 如何完整地手写实现new
  6. mdstyle暂存备用
  7. java tar压缩工具类_分享apache的commons-compress的TarUtils压缩工具类对文件数据进行加解密、解析及格式化校验等操作...
  8. 数据结构括号匹配代码_数据结构中的栈,你知道多少?
  9. 大学c语言第三章作业,c语言程序设计一章部分和第三章习题答案.doc
  10. 跟着开源项目学因果推断——whynot(十四)