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图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽 ...
随机推荐
- 学习廖雪峰的git教程6--版本控制
1git log 查看提交的版本 2git reset --hard HEAD^回退到上一个版本 3git reset --hard 版本号 回到某一个版本
- python数据分析与挖掘实战————银行分控模型(几种算法模型的比较)
一.神经网络算法: 1 import pandas as pd 2 from keras.models import Sequential 3 from keras.layers.core impor ...
- Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的就是一对一,collection 指的就是一对多查询.在 Myba ...
- Vue基于webpack自动装载配置
Vue的自动装载配置是在 @cli/cli-service 包中,配置文件的目录在 lib/config/ 下的文件,css.js 文件是配置样式的处理,先从这里开始了解把 CSS配置流程 对应着这 ...
- synchronized使用及原理解析
修饰静态方法.实例方法.代码块 Synchronized修饰静态方法,对类对象进行加锁,是类锁. Synchronized修饰实例方法,对方法所属对象进行加锁,是对象锁. Synchronized修饰 ...
- 解释 AOP?
面向切面的编程,或 AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理.
- 什么是 UML?
UML 是统一建模语言(Unified Modeling Language)的缩写,它发表于 1997 年,综合了当时已经存在的面向对象的建模语言.方法和过程,是一个支持模型 化和软件系统开发的图形化 ...
- js技术之分割split()
案例:把所有单词以空格为分割并将首字母转为大写 <!DOCTYPE html><html lang="en"><head> <meta c ...
- SCTF 2018_Simple PHP Web
SCTF 2018_Simple PHP Web 进入环境注意观察url http://www.bmzclub.cn:23627/?f=login.php 有点像是文件读取我们尝试读一下/etc/pa ...
- 《剑指offer》面试题1:赋值运算函数
面试题1:赋值运算函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString(char* pData = NU ...