python - Opencv上的线性反转图像
问题描述
我正在尝试使用 opencv 和 python 在 GIMP 中模拟线性反转函数。除了在线性光下使用之外,我找不到有关如何实现该功能的更多信息。自从我读到 opencv 导入线性 BGR 图像后,我开始尝试在 RGB opencv 上进行正常反转,但我只能复制常见的GIMP 上的反演方法。
反转功能:
def negative(image):
img_negative = (255-image)
return img_negative
原来的
GIMP 上的线性反转(负)图像
GIMP 上的倒置(负)图像
任何见解将不胜感激。
解决方案
这需要一些尝试和错误,但除了反转图像之外,您还必须进行一些缩放和平移。
我具体做的是除了反转图像之外,我还截断了每个通道的强度超过 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
. 如果您只想单独查看图像:
与你的相比:
这与您在提供的输出图像中看到的不完全一样,特别是因为彩色方块周围似乎有一些噪点,但这是我能得到的最接近的结果,有人可能会争辩说我产生的结果在感知上更好。
希望这可以帮助!
推荐阅读
- android - 使用 PixelCopy 在 DialogFragment 中复制缩放视图
- vue.js - 如何拆分单元格以匹配我的表格数据使用元素 UI 和 vue?
- python - 检查数据框熊猫中每个数据点的最佳方法
- python-3.x - 通过更改熊猫组内的列值来创建组
- batch-file - 批处理文件 - 读取 csv 值并更改值
- java - JOOQ 查询层次结构
- sql - Oracle 查询返回没有选择的行错误
- c# - Unity:使用 TouchPhase.Moved 时如何停止读取第一次触摸
- google-maps - 带有离子的谷歌地图上的搜索栏
- c# - 通过代码更改音频窗口设置(从设置应用程序)