• [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

  • 相关阅读:
    sqlserver 分布式连接方式
    介绍27款经典的CSS框架
    一些初级问题小总结
    WCF>一个运行环境,一个服务逻辑人,一个客户
    学习wcf过程的总结
    .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)(转)
    wcf一
    互联网用户能力解放带来的革命
    编程实现>ASP.NET 3.5开发范例精讲精析>探讨FormView控件
    互联网未来的趋势
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/12853502.html
Copyright © 2020-2023  润新知