写点什么

Python 图像处理丨 OpenCV+Numpy 库读取与修改像素

  • 2022 年 4 月 21 日
  • 本文字数:1834 字

    阅读完需:约 6 分钟

本文分享自华为云社区《[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)
复制代码

输出像素和图像如下所示:15510461[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] = 255img[78, 125, 1] = 255img[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。15510461255255255[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 cv2import 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 在进行处理。15510461

四.Numpy 修改像素方法

使用 Numpy 的 itemset 函数修改像素,调用方式如下:图像.itemset(位置, 新值)例如:img.itemset((88,99), 255)

# -*- coding:utf-8 -*-import cv2import 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))
复制代码

输出结果如下:15510461100100100

也可以同时输出 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图像处理及识别》


点击关注,第一时间了解华为云新鲜技术~​

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
Python图像处理丨OpenCV+Numpy库读取与修改像素_Python_华为云开发者社区_InfoQ写作社区