首页 > 解决方案 > Opencv上的线性反转图像

问题描述

我正在尝试使用 opencv 和 python 在 GIMP 中模拟线性反转函数。除了在线性光下使用之外,我找不到有关如何实现该功能的更多信息。自从我读到 opencv 导入线性 BGR 图像后,我开始尝试在 RGB opencv 上进行正常反转,但我只能复制常见的GIMP 上的反演方法。

反转功能:

def negative(image):
    img_negative = (255-image)
    return img_negative

原来的

原来的

GIMP 上的线性反转(负)图像

我想要的是

GIMP 上的倒置(负)图像

我在opencv中得到了什么

任何见解将不胜感激。

标签: pythonopencvimage-processingcolorsgimp

解决方案


这需要一些尝试和错误,但除了反转图像之外,您还必须进行一些缩放和平移。

我具体做的是除了反转图像之外,我还截断了每个通道的强度超过 153 的任何值,并将它们饱和到 153。使用这个中间输出后,我移动范围,使最低值映射到 102 和最高值被映射到 255。这只需将 102 添加到中间输出中的每个值即可。

当我这样做时,我得到了与您所追求的相似的图像。

换句话说:

import cv2
import numpy as np

im = cv2.imread('input.png') # Your image goes here
im_neg = 255 - im
im_neg[im_neg >= 153] = 153 # Step #1
im_neg = im_neg + 102 # Step #2
cv2.imshow('Output', np.hstack((im, im_neg)))
cv2.waitKey(0)
cv2.destroyWindow('Output')

值得庆幸的是,最小值和最大值分别为 0 和 255,这使得这个过程更简单。我得到这个输出并注意到我将两个图像连接在一起:

在此处输入图像描述

请注意,您想要的图像存储在im_neg. 如果您只想单独查看图像:

在此处输入图像描述

与你的相比:

这与您在提供的输出图像中看到的不完全一样,特别是因为彩色方块周围似乎有一些噪点,但这是我能得到的最接近的结果,有人可能会争辩说我产生的结果在感知上更好。

希望这可以帮助!


推荐阅读