繁体   English   中英

使用 OpenCV、python 更改带有 hsv 值的 rgb 图像颜色

[英]Change rgb image color with hsv values with OpenCV, python

我的任务是使用给定的 hsv 参数将红色矩形更改为蓝色:-0.3333、-0.05、-0.05

然后保存新图像。

我使用以下站点来演示蓝色方形变换。 HSV 到 RGB 转换所以首先我必须检查图像 hsv。 让我们说例如 1, 1, 1

在此处输入图像描述

要将其转换为蓝色,我必须从图像 hsv 中减去给定的参数。

h:1 - 0.3333 = 0.667,s:1 - 0.05 = 0.95,v:1 - 0.05 = 0.95

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我假设首先我必须将 rbg 图像转换为 hsv,但我无法弄清楚如何使用给定参数将其转换为蓝色。

import cv2

image = cv2.imread('C:\projects\red.jpg')

hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

cv2.imwrite('C:\projects\hsv_blue.jpg', hsv_image)

cv2.imshow('HSV image', hsv_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

我感谢任何帮助。

一般来说,你应该识别红色方块,制作一个遮罩来改变像素 colors 并改变它。

下面的代码可能会有所帮助,但我使用 opencv HSV 颜色范围( H [0-180]、S [0-255]、V [0-255])。 我无法理解您的 HSV 参数范围。

import cv2
import numpy as np

#Load image
image = cv2.imread('redsquare.jpg')
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

#Define red square area
hsv_lower_red = np.array([150,50,70])
hsv_upper_red = np.array([180,255,255])
mask = cv2.inRange(image_hsv, hsv_lower_red, hsv_upper_red)

#Change red to blue
hsv_blue_color = np.uint8([[[120,255,255 ]]])
image_hsv[mask > 0] = hsv_blue_color

#Save results to file
image = cv2.cvtColor(image_hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite('bluesquare.jpg', image)

这会起作用,255 在 OpenCV 上是 100%。

image = cv2.imread('img.png')
img_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

img_hsv[:, :, 0] = (img_hsv[:, :, 0] - int(255 * 0.3333)) % 255
img_hsv[:, :, 1] = (img_hsv[:, :, 1] - int(255 * 0.05)) % 255
img_hsv[:, :, 2] = (img_hsv[:, :, 2] - int(255 * 0.05)) % 255

img_bgr = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2RGB)
cv2.imwrite("modified_image.jpg", img_bgr)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM