Python图像处理丨OpenCV+Numpy库读取与修改像素
摘要:本篇文章主要讲解 OpenCV+Numpy 图像处理基础知识,包括读取像素和修改像素。
本文分享自华为云社区《[Python图像处理] 二.OpenCV+Numpy库读取与修改像素》,作者: eastmount。
一.传统读取像素方法
1.灰度图像,返回灰度值。
返回值=图像(位置参数),例:p = img[88,142] print§
- # -*- coding:utf-8 -*-
- import cv2
- #读取图片
- img = cv2.imread("picture.bmp", cv2.IMREAD_UNCHANGED)
- #灰度图像
- p = img[88, 142]
- print(p)
- #显示图像
- cv2.imshow("Demo", img)
- #等待显示
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- #写入图像
- cv2.imwrite("testyxz.jpg", img)
输出结果如下图所示:[131 131 131],由于该图是24位BMP,B=G=R输出三个相同的结果,有的图像仅有一个像素点则输出一个值。
2.BGR图像,返回值为B、G、R的值。
例:
b = img[78, 125, 0] print(b)
g = img[78, 125, 1] print(g)
r = img[78,125, 2] print
- # -*- coding:utf-8 -*-
- import cv2
- #读取图片
- img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
- #BGR图像
- b = img[78, 125, 0]
- print(b)
- g = img[78, 125, 1]
- print(g)
- r = img[78, 125, 2]
- print(r)
- #方法二
- bgr = img[78, 125]
- print(bgr)
- #显示图像
- cv2.imshow("Demo", img)
- #等待显示
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- #写入图像
- cv2.imwrite("testyxz.jpg", img)
输出像素和图像如下所示:
155
104
61
[155 104 61]
二.传统修改像素方法
1.修改单个像素值
BGR图像可以通过位置参数直接访问像素值并进行修改,输出结果如下所示:
- # -*- coding:utf-8 -*-
- import cv2
- #读取图片
- img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
- #BGR图像
- print(img[78, 125, 0])
- print(img[78, 125, 1])
- print(img[78, 125, 2])
- #修改像素
- img[78, 125, 0] = 255
- img[78, 125, 1] = 255
- img[78, 125, 2] =255
- print(img[78, 125])
- img[78, 125] = [10, 10, 10]
- print(img[78, 125, 0])
- print(img[78, 125, 1])
- print(img[78, 125, 2])
- #方法二
- print(img[78, 125])
- img[78, 125] = [10, 10, 10]
- print(img[78, 125])
输出结果如下所示,通过两种方法分别将B、G、R像素值修改为255和0。
155
104
61
255
255
255
[255 255 255]
[10 10 10]
2.修改区域像素
通过访问图像数组的位置区域实现区域像素修改,比如 [100:150,400:500] 是访问第100到150行,400到500列的区域,再对该区域像素进行修改。代码如下所示:
- # -*- coding:utf-8 -*-
- import cv2
- #读取图片
- img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
- #BGR图像
- img[100:150, 400:500] = [255, 255, 0]
- #显示图像
- cv2.imshow("Demo", img)
- #等待显示
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- #写入图像
- cv2.imwrite("testyxz.jpg", img)
输出结果如下图所示,[255, 255, 0]是浅蓝色。
三.Numpy读取像素方法
使用Numpy进行像素读取,调用方式如下:
返回值 = 图像.item(位置参数)
- # -*- coding:utf-8 -*-
- import cv2
- import numpy
- #读取图片
- img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
- #Numpy读取像素
- blue = img.item(78, 100, 0)
- green = img.item(78, 100, 1)
- red = img.item(78, 100, 2)
- print(blue)
- print(green)
- print(red)
- #显示图像
- cv2.imshow("Demo", img)
- #等待显示
- cv2.waitKey(0)
- cv2.destroyAllWindows()
输出结果如下,注意OpenCV读取图像通道是BGR,也可以转换成RGB在进行处理。
155
104
61
四.Numpy修改像素方法
使用Numpy的itemset函数修改像素,调用方式如下:
图像.itemset(位置, 新值)
例如:img.itemset((88,99), 255)
- # -*- coding:utf-8 -*-
- import cv2
- import numpy
- #读取图片
- img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
- #Numpy读取像素
- print(img.item(78, 100, 0))
- print(img.item(78, 100, 1))
- print(img.item(78, 100, 2))
- img.itemset((78, 100, 0), 100)
- img.itemset((78, 100, 1), 100)
- img.itemset((78, 100, 2), 100)
- print(img.item(78, 100, 0))
- print(img.item(78, 100, 1))
- print(img.item(78, 100, 2))
输出结果如下:
155
104
61
100
100
100
也可以同时输出B、G、R三个值,核心代码如下:
- print(img[78, 78])
- img.itemset((78, 78, 0), 0)
- img.itemset((78, 78, 1), 0)
- img.itemset((78, 78, 2), 0)
- print(img[78, 78])
- #[155 104 61]
- #[0 0 0]
本文摘录自eastmount X华为云开发者社区联合出品的电子书《从零到一 • Python图像处理及识别》。
点击免费下载电子书《从零到一 • Python图像处理及识别》
Python图像处理丨OpenCV+Numpy库读取与修改像素的更多相关文章
- 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)
在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...
- 【转】Python xlrd、xlwt、xlutils读取、修改Excel文件
Python xlrd.xlwt.xlutils读取.修改Excel文件 一.xlrd读取excel 这里介绍一个不错的包xlrs,可以工作在任何平台.这也就意味着你可以在Linux下读取Excel文 ...
- Python图像处理丨基于OpenCV和像素处理的图像灰度化处理
摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理. 本文分享自华为云社区<[Python图像处理 ...
- Python图像处理丨图像腐蚀与图像膨胀
摘要:本篇文章主要讲解Python调用OpenCV实现图像腐蚀和图像膨胀的算法. 本文分享自华为云社区<[Python图像处理] 八.图像腐蚀与图像膨胀>,作者: eastmount . ...
- Python图像处理丨带你认识图像量化处理及局部马赛克特效
摘要:本文主要讲述如何进行图像量化处理和采样处理及局部马赛克特效. 本文分享自华为云社区<[Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效>,作者: eastmoun ...
- 跟我学Python图像处理丨带你掌握傅里叶变换原理及实现
摘要:傅里叶变换主要是将时间域上的信号转变为频率域上的信号,用来进行图像除噪.图像增强等处理. 本文分享自华为云社区<[Python图像处理] 二十二.Python图像傅里叶变换原理及实现> ...
- 跟我学Python图像处理丨获取图像属性、兴趣ROI区域及通道处理
摘要:本篇文章主要讲解Python调用OpenCV获取图像属性,截取感兴趣ROI区域,处理图像通道. 本文分享自华为云社区<[Python图像处理] 三.获取图像属性.兴趣ROI区域及通道处理 ...
- Python图像处理丨三种实现图像形态学转化运算模式
摘要:本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像开运算.图像闭运算和梯度运算 本文分享自华为云社区<[Python图像处理] 九.形态学之图像开运算.闭运算.梯度运 ...
- 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算
摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现. 本文分享自华为云社区<[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽 ...
随机推荐
- sqlmap之waf绕过
#一点补充 在老版本的安全狗中,可通过构造payload: http://xx.xx.xx.xx/sqli-labs/Less-2/index.php/x.txt?id=1 and 1=1 可通过in ...
- gitLab上dev分支上的内容都拉取到本地了
从dev分支上更新代码 1.与远程仓库建立连接:git remote add origin XXXXX.git 2.使用git branch 查看本地是否具有dev分支 3.如果没有 git fetc ...
- CF1430F Realistic Gameplay (贪心+DP)
朴素做法暴力DP,O(nk)过不去... 1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 ...
- Minikube使用文档
最近在参与社区flink-operator的开发,开发的过程中经常使用到minikube来本地验证这篇文章记录下相关使用 安装 https://minikube.sigs.k8s.io/docs/st ...
- Servlet:浏览器下载文件时文件名为乱码问题
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...
- eclipse启动指定jvm的版本
参阅:https://www.eclipse.org/forums/index.php/t/1105435/ https://wiki.eclipse.org/Eclipse.ini#-vm_valu ...
- 比较一下 Java 和 JavaSciprt?
JavaScript 与 Java 是两个公司开发的不同的两个产品.Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联网应用程序 开发:而 JavaSc ...
- Linux Yum仓库源配置
Yum概念:Yum软件仓库的作用是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术 Yum配置仓库源放置位置:/etc/yum.repo.d/ :配置文件需以 .repo 结 ...
- idea中Git的配置和Github上推拉项目
1.去官网下载Git,并且安装它.安装步骤较为简单,此处就不再赘述. 2.在idea中配置Git信息 Git路径就是你电脑中安装Git的位置,找到git.exe文件(正常情况下,idea都会自动给你匹 ...
- 10.Flink实时项目之订单维度表关联
1. 维度查询 在上一篇中,我们已经把订单和订单明细表join完,本文将关联订单的其他维度数据,维度关联实际上就是在流中查询存储在 hbase 中的数据表.但是即使通过主键的方式查询,hbase 速度 ...