zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    java基础知识回顾之javaIO类---InputStreamReader和OutputStreamWriter转化流
    java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片
    基本知识《一》继承初始化过程
    java调用matlab函数
    Dubbo基础篇-zookeeper安装(单点)
    《转》从0到100——知乎架构变迁史
    算法
    【转】基于LDA的Topic Model变形
    《转》探寻微博背后的大数据原理:微博推荐算法简述
    一个完整推荐系统的设计实现-以百度关键词搜索推荐为例
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/12853502.html
Copyright © 2011-2022 走看看