Flask接口签名sign原理与实例代码浅析
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~