zoukankan      html  css  js  c++  java
  • Python-OpenCV——Image inverting

    通常我们将读入的彩色图转化成灰度图,需要将灰度图反转得到掩码,如何正确快速的得到某个图像的反转图呢?

    首先看一种看似很正确的写法,对其中每个像素进行如下处理:

    img[x,y] = abs(img[x,y] - 255)

    其实,灰度图中像素值是<class numpy.uint8>, 即8位无符号数,这是为了保证像素值0~255。

    所以正确的写法只需 img = 255-img。

    def inverte(imagem, name):
        imagem = (255-imagem)
        cv2.imwrite(name, imagem)

    或者使用OpenCV中的库函数

    imagem = cv2.bitwise_not(imagem)

    还有一种简洁的方法,但是不那么直观。

    import cv2
    image = cv2.imread("img.png")
    image = ~image
    cv2.imwrite("img_inv.png",image)

    为什么这是正确的呢?前面知数据类型为8位无符号数,已知 $x+(sim x)+1=0$,所以$255-x=255+(sim x)+1=(sim x)+256= sim x$.

    import numpy as np
    x1 = np.array([25,255,10], np.uint8) #for example
    x2 = ~x1
    print(x1)
    print (x2)

    结果为:

    [ 25 255  10]
    [230   0 245]

    参考链接:stack overflow中inverting image in Python with OpenCV  https://stackoverflow.com/questions/19580102/inverting-image-in-python-with-opencv

  • 相关阅读:
    其他
    Win10
    Win10
    面向对象与设计模式
    Git
    Java
    Git
    Git
    Git
    一、I/O操作(File文件对象)
  • 原文地址:https://www.cnblogs.com/lfri/p/10619167.html
Copyright © 2011-2022 走看看