[Python图像处理]二 OpenCV借助Numpy库读取和修改像素
传统读取像素方法
灰度图像(返回的值即为该位置的像素值): p = img[位置参数] eg: p = img[88, 142]
BGR图像(返回B,G,R的值)
代码如下:
import cv2 def test(): img = cv2.imread("result.jpg", cv2.IMREAD_UNCHANGED) p = img[88, 142] print(p) # [29 32 47] # b=p[0] g=p[1] r=p[2] print(p[0], p[1], p[2]) # 29 32 47 # 显示图像 cv2.imshow("Demo", img) key = cv2.waitKey(0) # 按退出键时关闭 if key == 27: cv2.destroyWindow("Demo") test()
传统修改像素方法
修改单个像素。BGR图像可以通过位置参数直接访问像素值直接进行修改
代码如下:
def test1(): img = cv2.imread("result.jpg", cv2.IMREAD_UNCHANGED) print(img[66, 172]) # [ 44 61 110] # 修改单个像素 img[66, 172, 0] = 255 img[66, 172, 1] = 255 img[66, 172, 2] = 255 print(img[66, 172]) # [255 255 255] # 修改像素 img[66, 172] = [233, 233, 233] print(img[66, 172]) # [233 233 233] test1()
修改区域像素,通过访问图像数组的位置区域实现区域像素修改
代码如下:
def test2(): # 修改区域像素 img = cv2.imread("result.jpg", cv2.IMREAD_UNCHANGED) # 修改第10行到200行,第100列到200列区域的像素值 img[10:200, 100:200] = [255, 255, 0] cv2.imshow("Demo", img) key = cv2.waitKey(0) if key == 27: cv2.destroyWindow("Demo") test2()
Numpy读取像素方法
使用Numpy进行像素读取,调用方式如下 返回值=图像.item(位置参数)
def test3(): img = cv2.imread("result.jpg", cv2.IMREAD_UNCHANGED) # blue blue = img.item(78, 100, 0) # green green = img.item(78, 100, 1) #red red = img.item(78, 100, 2) print(blue, green, red) # 45 65 113 test3()
Numpy修改像素方法
使用Numpy的itemset函数修改像素
图像.itemset((位置), 新值)
ef test4(): img = cv2.imread("result.jpg", cv2.IMREAD_UNCHANGED) img.itemset((78, 100, 0), 100) img.itemset((78, 100, 1), 100) img.itemset((78, 100, 2), 100) cv2.imshow("Demo", img) if cv2.waitKey(0) == 27: cv2.destroyWindow("Demo") print(img[78, 100]) # [100 100 100] test4()
注意点:
img[位置参数] eg: img[88, 120]
img.item(88, 120, 0|1|2)
imhg.itemset((88, 120, 0|1|2), 新值)
转自: https://blog.csdn.net/Eastmount/category_7912787.html