本文分享自华为云社区《[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] =255print(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库读取与修改像素相关推荐

  1. 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  2. 《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  3. 《OpenCv视觉之眼》Python图像处理七 :Opencv图像处理之高通滤波和低通滤波原理及构造

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  4. 《OpenCv视觉之眼》Python图像处理十 :Opencv图像形态学处理之开运算、闭运算和梯度运算原理及方法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  5. 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)...

    在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...

  6. 用python画股票分时图 github_用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)...

    在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...

  7. CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)

    CV:计算机视觉技术之图像基础知识(二)-以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础) 目录 ...

  8. Python 随笔:用 PIL 库读取图像文件像素长宽大小

    Python 随笔:用 PIL 库读取图像文件像素宽高大小 1.前言 安装 PIL 库(全称是pillow),所以安装命令上的名称是pillow pip install pillow 2. 使用pil ...

  9. Python图像处理丨详解图像去雾处理方法

    摘要:本文主要讲解ACE去雾算法.暗通道先验去雾算法以及雾化生成算法. 本文分享自华为云社区<[Python图像处理] 三十.图像预处理之图像去雾详解(ACE算法和暗通道先验去雾算法)丨[拜托了 ...

最新文章

  1. 未能从程序集 XX加载类型XXX的错误解决方法(借以提醒NHibernate使用者)
  2. 用一个创业故事串起操作系统原理(三)
  3. java 字符串xml,解析java中的xml字符串?
  4. sql优化ppt_一款跨平台免费的开源 SQL 编辑器和数据库管理器!
  5. 那些年,程序员读错的英语
  6. 关于0基础磁盘管理(gpt UEFI...)最好的一篇文章(来自gentoo linux)
  7. 记录知识点或技术方案信息
  8. 关于VGG模型文件的存放位置
  9. 蒙特.卡罗方法求解圆周率近似值原理与Python实现
  10. 《Puppet实战手册》——1.4 利用Git管理配置清单
  11. matlab gaot工具箱安装详细说明
  12. js-合并两个有序数组
  13. VueUse中文文档Vue官方工具库
  14. 今日分享:js制作一个简单的新年倒计时
  15. BibTex中参考文献种类
  16. Linux系统移植(第2版)
  17. delphi 隐藏指定程序的托盘图标
  18. 数据结构与算法-普利姆算法(Prim) | 尚硅谷韩顺平
  19. react native ScrollView实现滑动锚定,滑动到指定位置
  20. 电脑显示器不亮的三种原因和解决方法

热门文章

  1. 英特尔 开源降噪库 api_Google的新操作系统,英特尔的开源VR耳机以及更多新闻
  2. (32)Gulp CSS hack 与 Autoprefixer
  3. jgGrid扩展 显示查询用时
  4. 新特性 | Java8 的这个特性,用起来真的很爽!
  5. HTML map元素
  6. mlag 堆叠_三分钟了解VRRP、堆叠、M-LAG
  7. mysql事务锁导致tomcat崩溃_数据库连接池连接耗尽,导致tomcat请求无响应,呈现出假死状态...
  8. quartz cron 每周一_quartz框架和关闭超时订单
  9. as3 urlloader php交互 jsion,phpQuery获取网页里的js变量,如何获取
  10. java 一个大事务下的新增、修改、查询_一文带你轻松搞懂事务隔离级别(图文详解)...