python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离
图像像素的访问、通道的合并与分离
(一)像素访问
在第一篇博客中,向大家介绍了,所谓的图像在计算机看来就是一个矩阵,对于RGB图像矩阵一共有三层,分别代表着RGB通道,矩阵中每一个数的大小代表着不同通道的亮度,范围在0~255之间。
访问图像的像素,就如同对矩阵元素的访问,很好理解。
print(img[0][0][0])
输出为:
34
也可以对所读取的图像矩阵的像素进行赋值
for i in range(400):for j in range(400):for k in range(3):img[i][j][k] = 255
显示图像为:
可以看到上图左上角形成了400x400像素的白色区域。
利用这个图像矩阵的特点,我们还可以做一些有趣的事情。比如说,椒盐现象。
我们需要先写一个椒盐函数,将我们想要的像素随机的分布在图像上。
def salt(img, numbers):for x in range(numbers):i = np.random.randint(img.shape[0])j = np.random.randint(img.shape[1])for k in range(3):img[i][j][k] = 255return img
嘿嘿,先来上1000个点!
img = salt(img, 1000)
图像显示为:
(二)通道分离
对于RGB图像,拥有RGB三原色通道,从矩阵的角度来讲,可以理解为三层矩阵,也就是三维的矩阵,每一层代表着一个通道。将图片进行通道分离可以使用OpenCV里的split函数,也可以通过numpy库对图像矩阵进行直接操作。图像展示的是不同通道的256级灰度图。
b, g, r = cv2.split(img)cv2.namedWindow('Blue')
cv2.imshow('Blue', b)
cv2.waitKey(0)cv2.namedWindow('Green')
cv2.imshow('Green', g)
cv2.waitKey(0)cv2.namedWindow('Red')
cv2.imshow('Red', r)
cv2.waitKey(0)
如果单独保留一个通道,并且令其它通道的图像矩阵的值全为零,将会变得更加好看,特意找了一个小的图片,避免篇幅过长。
img = cv2.imread('tongren.jpg')
b, g, r = cv2.split(img)pic = np.zeros(np.shape(img), np.uint8)
pic[:, :, 0] = b
cv2.namedWindow('Blue')
cv2.imshow('Blue', pic)
cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8)
pic[:, :, 1] = g
cv2.namedWindow('Green')
cv2.imshow('Green', pic)
cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8)
pic[:, :, 2] = r
cv2.namedWindow('Red')
cv2.imshow('Red', pic)
cv2.waitKey(0)cv2.destroyAllWindows()
也可以任选两个通道进行拼接。
pic = np.zeros(np.shape(img), np.uint8)
pic[:, :, 0] = b
pic[:, :, 1] = g
cv2.namedWindow('Blue-Green')
cv2.imshow('Blue-Green', pic)
cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8)
pic[:, :, 0] = b
pic[:, :, 2] = r
cv2.namedWindow('Blue-Red')
cv2.imshow('Blue-Red', pic)
cv2.waitKey(0)pic = np.zeros(np.shape(img), np.uint8)
pic[:, :, 1] = g
pic[:, :, 2] = r
cv2.namedWindow('Green-Red')
cv2.imshow('Green-Red', pic)
cv2.waitKey(0)cv2.destroyAllWindows()
(三)通道合并
通道合并经常用的有两种方法
第一个是:OpenCV中自带的函数megre
megre = cv2.merge([b, g, r])
第二个是:numpy模块中的dstack,深度拼接函数
dstack = np.dstack([b, g, r])
但这两种拼接方式是不一样的,这一点一定要注意。pandas中也有对矩阵的拼接操作也可实现np.dstack()相同的效果,这里就不介绍了。
python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离相关推荐
- Python OpenCV 图像处理之 图像运算和图像位运算知识补充
Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 51 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...
- Python OpenCV 图像处理之直方图的应用,取经之旅第 26 天
Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧. Python OpenCV 基础知识铺垫 cv2.compareHist 函数 橡皮擦的小节 基础知识铺垫 上篇博客 Py ...
- Python图像处理二:图像像素的访问与数据类型
图像像素的访问与数据类型 图像读入程序中后,是以numpy数组存在的,因此对numpy数组的一切功能,对图像也适用.对数组元素的访问,实际上就是对图像像素点的访问. 一.图像像素的访问 彩色图像访问方 ...
- Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图
一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...
- Python+OpenCV图像处理(五)——图像阈值和二值化
系列文章 Python+OpenCV图像处理(一)--OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)--几何变换 Python+OpenCV图像处理(三)--彩色空间互换 P ...
- 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- Python+Opencv图像处理新手入门教程(三):阈值与二值化
一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...
- 用python怎么样实现图像二值化_使用Python+OpenCV如何实现图像二值化
使用Python+OpenCV如何实现图像二值化 发布时间:2020-10-26 14:15:52 来源:亿速云 阅读:77 作者:蛋片鸡 这篇文章运用简单易懂的例子给大家介绍使用Python+Ope ...
- 数字图像处理二维码识别 python+opencv实现二维码实时识别
数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...
最新文章
- ClickHouse系列教程六:源码分析之Debug编译运行
- gitlab介绍、安装及gitlab CI、与jenkins的对比
- HDU 4020 Ads Proposal
- 2016 Top 10 Android Library
- 分布式与人工智能课程(part10)--图像库的基本使用
- hdu3068马拉车
- ssl初一组周六模拟赛【2018.4.7】
- keepalived实现高可用nginx反向代理的简单案例
- asterisk1.8 拨号方案 mysql存储(动态)
- shiro使用jdbc_realm登录验证
- 11届蓝桥杯青少年组C++全国赛高级组 六.编程实现:求阶乘(python3实现)
- JavaScript学习---JavaScript基础知识
- 个人对stacking的思想理解
- hashmap put过程_阿里面试官:HashMap数据结构之道
- #洛谷oj:P2024 [NOI2001] 食物链
- 12万字 | 2021数据安全与个人信息保护技术白皮书(附下载)
- php之sprintf的用法,PHP之sprintf函数用法详解_PHP
- 日常记账后,图表查看账目类别
- Specification同时实现模糊查询、排序、分页
- 2、解读中台 -- 中台的作用
热门文章
- java数组显示最大值,java 如何用方法在数组中找到最大值并显示他的名称?
- ACL'21 | debug完的神经网络,如何测试是否仍然存在bug?
- 论文浅尝 - ACL2021 | 探讨跨句事件联合抽取问题
- requirements.txt一键安装项目所需要的的python包
- 随机森林RF、XGBoost、GBDT和LightGBM的原理和区别
- Linux系统中Oracle数据库使用SELECT语句检索数据(1)实例应用
- 斯坦福完全可解释深度神经网络:你需要用决策树搞点事
- MySQL 5.7.18 解压版安装
- 大数据世界要熟悉的5门语言
- 笔记一 Redis基础