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

网友投稿 265 2022-09-07


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] = 255img[78, 125, 1] = 255img[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 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在进行处理。

155

104

61

四.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))

输出结果如下:

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图像处理及识别》。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:# yyds干货盘点 # Python列表中的深浅拷贝,你学废了嘛?
下一篇:基于Java实现考试管理系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~