我正在编写一个程序,该程序观察屏幕上显示0到100之间的数字的区域。当数字为100时,该区域显示绿色文本;当数字为0时,该区域显示红色文本。随着数字从100开始减小,该区域缓慢地从纯绿色渐变为纯红色。
以下是一些例子:
第一次100
就是rgb(0, 255, 0)
84
是rgb(73, 255, 0)
,65
是rgb(172, 255, 0)
,41
是rgb(255, 213, 0)
,17
就是rgb(255, 88, 0)
0
就是rgb(255, 0, 0)
问题
是否可以使用cv2.inRange(img, lower, upper)
隔离此范围内的 * 任何/所有 * 颜色,其中lower
和upper
是[B, G, R]
形式的numpy数组?如果有合适的范围,您能解释为什么它有效吗?
我有这样的代码:
import cv2
import numpy as np
image = cv2.imread("image_of_text.png")
# Generate mask for color range
lower = [0, 0, 0]
upper = [0, 0, 0]
mask = cv2.inRange(image, np.array(lower), np.array(upper))
# Create black mask
h, w = image.shape[:2]
mask_b = np.zeros([h, w, 1], dtype=np.uint8)
# Combine masks
mask = cv2.bitwise_or(mask_b, mask)
cv2.imshow('result', mask)
cv2.waitKey(0)
我宁愿避免HSV范围,因为我的程序的其余部分不太适合在飞行中切换颜色空间。
1条答案
按热度按时间vsikbqxv1#
我在写问题的时候就解决了这个问题。
据我所知,我们需要分离两个独立的范围:
绿色--〉
lower
=rgb(0, 255, 0)
,upper
=rgb(255, 255, 0)
红色--〉
lower
=rgb(255, 0, 0)
,upper
=rgb(255, 255, 0)
编码:
通过查看我在问题中列出的文本颜色,我注意到两个中间数字都接近rgb(255,255,0),但由于该渐变有两个不同的端点,因此我需要指定两个独立的下限,而它们都具有相同的上限。