python - 使用 OpenCV 在 Python 中反转图像

标签 python arrays opencv numpy image-processing

我想加载彩色图像,将其转换为灰度,然后反转文件中的数据。

我需要的是:迭代 OpenCV 中的数组并使用此公式更改每个值(这可能是错误的,但对我来说似乎是合理的):

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

但我不明白为什么它不起作用:

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


def inverte2(imagem, name):
    for x in np.nditer(imagem, op_flags=['readwrite']):
        x = abs(x - 255)
    cv2.imwrite(name, imagem)


if __name__ == '__main__':
    nome = str(sys.argv[1])
    image = cv2.imread(nome)
    gs_imagem = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    inverte(gs_imagem, "invertida.png")
    inverte2(gs_imagem, "invertida2.png")

我不想做一个显式循环(我想更 Pythonic)。我可以看到,在一张白色背景的图像中,它变成了黑色,但仅此而已,其他颜色看起来并没有太大(如果有的话)变化。

最佳答案

你几乎做到了。您被 abs(imagem-255) 会给出错误结果的事实所欺骗,因为您的 dtype 是一个无符号整数。您必须执行 (255-imagem) 以保持整数无符号:

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

您也可以使用 OpenCV 的 bitwise_not 函数反转图像:

imagem = cv2.bitwise_not(imagem)

关于python - 使用 OpenCV 在 Python 中反转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580102/

相关文章:

python - 当使用 Group By 进行日期并计算该期间内的事件时,Pandas 从周日开始一周

java - 数组索引越界异常java

javascript - 如何使用一个数组作为另一个数组的键?

java - 如何将数组文件发送到其他类

python - 使用 OpenCV 4.0 对 HDR 图像进行色调映射

python 3 : Most efficient way to create a [func(i) for i in range(N)] list comprehension

python - 当第二个列表包含 numpy 数组时,根据 python 中的其他列表对列表进行排序不起作用

python - 如何使用python解析helm chart yaml文件

python - 使用Open CV删除背景并不精确,并且某些图片无法正确处理

c++ - cv::Mat 构造函数在哪里显式定义?