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()相同的效果,这里就不介绍了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PNG转EPS格式

由于使用LaTeX需要将png格式转为eps格式,如果电脑装了tex软件,则转换方式很简单: 首先打开需要转换的图片所在文件夹。在地址栏输入cmd: 此时会弹出,命令窗口,然后输入bmeps -c Figure1.png Figure1.eps 即…

工业根基,莫让ICT喧宾夺主

来源:英诺维盛公司新工业革命正在得到广泛的关注,而ICT则获得了更高的曝光率和话语权。ICT是信息、通信和技术三个英文词首字母组合(Information Communications Technology)。显然,ICT是新工业革命必不可少的“新工业…

python+OpenCV图像处理(三)绘制简单的几何图形、显示文字

绘制简单的几何图形、显示文字 (一)绘制直线和矩形 img np.zeros([512, 512, 3]) # line函数用来画直线,第一个参数可以理解为画布矩阵, # 第二个参数pt1是直线的起始位置,第三个参数pt2是直线的终止位置,…

信息转换原理: 信息、知识、智能的一体化理论

来源:人机与认知实验室【数据、信息、知识、智能除了转换外,是否还有变异、弥聚等?能否把这些变化看成是态、势、感、知结构扭曲而产生的必然现象?】摘要 如何把信息转换为解决问题所需要的智能,是信息科学领域的核心研究课题. 本…

MATLAB(一)Matlab“帮助”的使用

前言MATLAB是matrix和laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真…

javascript 学习笔记(一)

说明:从今天开始从基础抓起学习javascript-完全依据w3school(http://www.w3school.com.cn/js/js_intro.asp)网站顺序。这里我将我认为不好理解的地方积累下来,希望对像我一样的新手有益。 第一篇 JavaScript:写入 HTML 输出 1. javascript有…

[附下载]英特尔中国研究院携手生态伙伴发布《机器人4.0白皮书》

来源:硬蛋迈向云-边-端融合的机器人4.0时代在2019国际人工智能与机器人创新生态峰会上,英特尔中国研究院院长宋继强博士发表了题为《迈向云-边-端融合的机器人4.0时代》的主题演讲。宋院长分析了机器人行业的现状与发展趋势,提出了基于AI、5G…

MATLAB(二)数据的输入

数据的输入 (一)简单矩阵的输入 1.要直接输入矩阵时,矩阵一行中的元素用空格或逗号分隔;矩阵行与行之间用分号“;”隔离,整个矩阵放在“[ ]”里。 >> a [1, 2, 3, 4;5, 6, 7, 8] a 1 2 3 …

无人驾驶产业的国际比较和PEST分析

来源:智造智库【导读】国家新一代人工智能发展规划中明确提出,发展自动驾驶汽车和轨道交通系统,加强车载感知、自动驾驶、车联网、物联网等技术集成和配套,开发交通智能感知系统,形成我国自主的自动驾驶平台技术体系和…

人类正在进入超级智能时代,论一种新超级智能的崛起

本文发表在2019年7月30号《社会科学报》,是刘锋根据2019年7月出版的著作《崛起的超级智能:互联网大脑》核心内容撰写的一篇文章,也感谢刘慈欣,张亚勤,周鸿祎,王飞跃,约翰.翰兹等专家和好友推荐。…

有道翻译接口问题

博文更新: 更新地址:https://blog.csdn.net/qq_40962368/article/details/89053068 原博文: 在调用有道翻译api接口时,出现了如下错误: 您要翻译的内容是:english Traceback (most recent call last):F…

GE前董事长伊梅尔特谈数字化转型:制造企业这件事做不好,一定没出路

来源:《商业评论》2019年7月号;两位作者:GE前董事长兼CEO杰弗里伊梅尔特;GE第一位常驻教授维贾伊戈文达拉扬无论过去还是现在,企业要实现任何转型都不容易。制造企业想实施数字化转型?这比实施其他任何一种…

MATALB(三)绘图命令

绘图命令 (一)二维绘图命令 二维绘图的基本命令有plot,loglog,semilogx,semilogy和polar。它们的使用方法基本相同,其不同点是在不同的坐标中绘制图形。plot命令使用线性坐标空间绘制图形;loglo…

微软打压竞争对手:针对AWS、谷歌、阿里云等提高软件许可成本

来源:云头条使用在公共云上托管的专用服务器上运行的微软软件?那就准备好多付钱。微软改变了许可条款,将使微软软件对AWS、谷歌云和阿里云的一些客户来说变得更昂贵。微软现在声称:专用托管云服务的出现使传统外包和云服务之间的界…

python+OpenCV图像处理(四)图像的简单几何变换

图像的简单几何变换 先看一下关于图像几何变换的简介: 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。 适当的几何变换可以最大程度地消除由于成像角度、透视关系乃至镜头自身原因所造成的几何失真所产生的负面影响。有利于我们在后续…

谷歌AI自动重建果蝇大脑,离绘制人脑更进一步

来源:googleblog、biorxiv、venturebeat导语:将果蝇的大脑分割成成千上万个40纳米的超薄切片?不怕,谷歌新AI技术能够重建果蝇完整大脑。智东西8月6日消息,据外媒报道,谷歌刚刚公布了一项最新研究结果“用洪…

python+OpenCV图像处理(五)图像的阈值分割

图像的阈值处理一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法&#xf…

为什么有些softmax公式需要减去输入中的最大值

我们都知道softmax公式如下: 但有些softmax公式是先将每个x_i减去x中的最大值再代入以上公式 原因是为了防止上溢和下溢 举个例子,x[100000,100001,100002],如果直接代入上式数值会非常大,当对每个x的值减去x中的最大值后得到[-2,-1,0]&…

兰德公司报告分析 “分布式作战”对美空军兵力运用的影响

来源:兰德公司网站/图片来自互联网导读7月17日,兰德公司发布《竞争环境下的分布式作战:对美国空军兵力运用的影响》的报告,研究了美空军竞争环境下“分布式作战”的能力需求,分析了如何调整美空军当前的“兵力运用模式…

MATLAB(四)在高等数学中的应用

MATLAB在高等数学中的应用 (一)求极限 matlab中求极限的命令为 limit(expr, x, a) limit(expr, a) limit(expr) limit(expr, x, a, left) limit(expr, x, a, right) 其中,limit(expr, x, a)表示求符号表达式expr关于符号变量x趋近于a时的…