【问题标题】:How to change the image color when the pixels hsv values are in specific ranges?当像素 hsv 值在特定范围内时,如何更改图像颜色?
【发布时间】:2019-03-22 17:39:37
【问题描述】:

为了我的研究,我想编译一个代码来将图片像素值从 RGB 更改为 HSV,如果 V 值高于某个值,则再更改为 RGB。 但是,要做到这一点,我必须使用cv2.cvtColor(src,code)。 当我使用cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 时,效果很好! 但是当我使用cv2.cvtColor( list or str , cv2.COLOR_HSV2BGR) 时,它产生了错误...... 我认为 src 必须是图像。不幸的是,我不得不使用类型列表或 str 或 ndarray.. 我努力让他们形象化,但我认为这真的是一项艰巨的任务.. 如果您运行下面的代码,numpy 数组首先显示 V 通道。 关闭窗口后,我可以看到这个错误。 Traceback(最近一次调用最后一次):

文件“/home/sjw/PycharmProjects/untitled/hiccc.py”,第 18 行,在 img[i][j] = cv2.cvtColor(y, cv2.COLOR_HSV2BGR) TypeError: src 不是 numpy 数组,也不是标量

但我的问题不仅是知道这个错误,而且还做了一个完整的代码。 我需要你的帮助..拜托.... :(

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('/home/sjw/Pictures/seulgi.jpg')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
img_h, img_s, img_v = cv2.split(img2)

plt.imshow(img_v, interpolation='nearest')
plt.show()

for i in range(1, 1001):
for j in range(1, 1501):
    if img_v[i][j] > 125:
        y=''.join(str(v) for v in img_v[i:i][j:j])
        print(type(y))

        img[i][j] = cv2.cvtColor(y, cv2.COLOR_HSV2BGR)

cv2.imshow('sadd',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

  • 修复格式以提高可读性

标签: python image opencv colors


【解决方案1】:

对于整个图像,将V(in HSV) <|> th 所在的图像替换为HSV

import cv2
import numpy as np

fname = "test.png"
img = cv2.imread(fname)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

## darker 
pos1 = np.where(hsv[:,:,-1]<200)
dst1 = img.copy()
dst1[pos1] = hsv[pos1]
cv2.imwrite("dst1.png", dst1)

## lighter 
pos2 = np.where(hsv[:,:,-1]>200)
dst2 = img.copy()
dst2[pos2] = hsv[pos2]
cv2.imwrite("dst2.png", dst2)

【讨论】:

  • 哦,当我应用您出色的代码时,我真的很惊讶....但是要理解它,您能告诉我有关 hsv[:,:,-1] 的信息吗?我可以理解这意味着 V 通道,但我无法理解 -1
  • hsv 是 3 通道图像:hsv[:,:,2] =&gt; hsv[:,:,-1] =&gt; V
猜你喜欢
  • 2019-05-12
  • 2021-04-24
  • 2018-11-22
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多