如何使用OPENCV从原始图像中减去图像的“色调”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用OPENCV从原始图像中减去图像的“色调”相关的知识,希望对你有一定的参考价值。

我试图从该图像中减去图像的“色调”部分。我已经提取了所有的h,s,v组件。但我不知道下一步该做什么?它甚至可能吗?

这是我的代码

import cv2

def showimage(text,img):
    cv2.imshow(text,cv2.resize(img, (700, 700)))
    cv2.waitKey(0)
    return 0


# Read image in BGR
img_path = "new.jpg"
img = cv2.imread(img_path)
showimage("orig",img)
# Convert BGR to HSV and parse HSV
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
showimage("hsv",hsv_img)
h, s, v = hsv_img[:, :, 0], hsv_img[:, :, 1], hsv_img[:, :, 2]
showimage("h",h)
showimage("s",s)
showimage("v",v)

sub=hsv_img-h
cv2.destroyAllWindows()
答案

你不能减去hsv_imgh,因为它们的尺寸不同。但是,您可以使用h减去图像的灰度版本。为此,添加行 -

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sub = gray_img-h
showimage("sub",sub)

但是,如果您尝试使用零色调组件可视化图像,则可以使用以下代码执行此操作 -

例:

enter image description here enter image description here

import cv2
import numpy as np

def showimage(text,img):
    cv2.imshow(text,cv2.resize(img, (500,500)))
    cv2.waitKey(0)
    return 0


# Read image in BGR
img_path = "new.jpg"
img = cv2.imread(img_path)
showimage("orig",img)
# Convert BGR to HSV and parse HSV
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
showimage("hsv",hsv_img)
h, s, v = hsv_img[:, :, 0], hsv_img[:, :, 1], hsv_img[:, :, 2]
showimage("h",h)
showimage("s",s)
showimage("v",v)

h = np.zeros_like(h)

img2 = cv2.merge((h,s,v))
img2 = cv2.cvtColor(img2, cv2.COLOR_HSV2BGR)
showimage("With h=0 ", img2)

cv2.destroyAllWindows()

以上是关于如何使用OPENCV从原始图像中减去图像的“色调”的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV背景分割/从单个图像中减去

HDR图像处理HDR图像的色调映射 | python+opencv代码实现总结

OpenCV学习笔记03:缩放裁剪图像与调整图像色调

如何从 cv2.findContours 结果中重新创建带有孔的原始图像?

如何使用opencv从矩阵向量构造图像

Python从图像opencv中提取多个对象