当像素hsv值在特定范围内时,如何更改图像颜色?

时间:2018-10-17 23:48:50

标签: python image opencv colors

对于我的研究,我想编译一个代码,以将图像像素值从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通道。 关闭窗口后,我可以看到此错误。 追溯(最近一次通话):

  

文件“ /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()

1 个答案:

答案 0 :(得分:0)

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

enter image description here

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)