Как изменить цвет изображения, когда значения пикселей hsv находятся в определенных диапазонах? - PullRequest
0 голосов
/ 18 октября 2018

Для моего исследования я хотел бы скомпилировать код для изменения значения пикселя изображения с RGB на HSV, а затем на RGB, если значение V превышает определенное значение.Но для этого я должен использовать 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 - это не пустой массив и не скаляр

Но мой вопрос не только в том, что я знаю эту ошибку, но и сделал законченный код.Мне нужна твоя помощь .. Пожалуйста ....: (

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 голосов
/ 18 октября 2018

Для всего изображения замените изображение, где 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...