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

问题描述 投票:0回答:1

我试图从该图像中减去图像的“色调”部分。我已经提取了所有的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()
python opencv computer-vision
1个回答
0
投票

你不能减去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()
© www.soinside.com 2019 - 2024. All rights reserved.