numpy - 使用 Numpy 在 python 中移动 HSV 像素值

标签 numpy colors opencv3.0 hsv

我正在尝试转换(移位)HSV 图像(取自视频帧)中每个像素的值。

这个想法是通过使用以下等式将红色和黄色值反转为蓝色值,将黄色和红色反转为蓝色(以避免在程序稍后使用三个阈值,当我只能使用一个阈值时)。

(Hue + 90) % 180 (in OpenCV 3 Hue is in range [0,180])



这是我想出的:
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV);
H = hsv[:,:,0]
mask= [H<75 and H>128]
print("orig",hsv[mask])
hsv[mask] = ((hsv[mask]+90) % 180)

不幸的是,通过这种方法它不起作用我选择整个色调 channel 而不是它的像素值

最佳答案

这里有两种不同的可能性,我不确定你想要哪一种,但它们都很容易实现。您可以反转(反转可能是更好的词)色调彩虹,您可以使用 180 - hue .或者您可以使用 (hue + 90) % 180 将颜色偏移 180 度。就像你提到的。

反转颜色:

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
rev_h = 180 - h
rev_hsv = cv2.merge([rev_h, s, v])
rev_img = cv2.cvtColor(rev_hsv, cv2.COLOR_HSV2BGR)

变换颜色:
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
shift_h = (h + 90) % 180
shift_hsv = cv2.merge([shift_h, s, v])
shift_img = cv2.cvtColor(shift_hsv, cv2.COLOR_HSV2BGR)

这些是在 OpenCV 中执行此操作的惯用方法。

现在您想要做与上面相同的事情,但只针对满足条件的一些被 mask 的像素子集。这并不难做到;如果要移动一些蒙版像素:
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
h_mask = (h < 75) | (h > 128)
h[h_mask] = (h[h_mask] + 90) % 180
shift_hsv = cv2.merge([h, s, v])
shift_img = cv2.cvtColor(shift_hsv, cv2.COLOR_HSV2BGR)

关于numpy - 使用 Numpy 在 python 中移动 HSV 像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64415536/

相关文章:

python - 通过无法执行的并行Python执行Fortran子例程

python - np.array(filter(func,iter)) 不生成数组

java - 如何从 ssh 输出中删除颜色等

math - 颜色之间的相似性

android - 在 Android 中获取像素颜色

python - OpenCV :Text Processing and Noise Removal

python - python中两个numpy数组之间的区别

python - 二维 numpy 数组的映射函数

build - opencv V3 混合共享和非共享

opencv - 如何在某些点上绘制边界轮廓