[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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM