opencv中是否有任何算法/方法可用来识别对象,而不管太阳是黑还是亮。 我知道对于所有从事图像处理工作的人来说,这可能是个老问题。
我一直在尝试使用HSV范围来识别RGB颜色,问题是早上工作的范围似乎在下午或阴天或晴天时无法有效工作(简而言之,当外部照明条件发生变化时) )。至少在一天中的某个时间无法识别出其中一种颜色。因此,我无法使用一组RGB颜色值来使程序稳定。
显然,这些值在晚上有效
lower = {'red': (0, 70, 50), 'green': (30, 28, 50), 'blue': (90, 25, 21)}
upper = {'red': (7, 255, 255), 'green': (85, 255, 255), 'blue': (230, 255,255)}
下午,
lower = {'red': (0, 70, 50), 'green': (40, 28, 50), 'blue': (97, 25, 30)}
upper = {'red': (5, 255, 255), 'green': (85, 255, 255), 'blue': (230, 255, 255)}
这是我进行图像处理的代码的一部分,
frame = cv2.imread('picture.png')
blurred = cv2.GaussianBlur(frame, (7, 7), 0)
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV_FULL)
kernel = np.ones((5, 5), np.uint8)
mask = cv2.inRange(hsv, lower[key], upper[key])
print(lower[key])
print(upper[key])
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
# find contours in the mask and initialize the current
# (x, y) center of the ball
_, cnts, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame, cnts, -1, (0, 255, 255), 1)
if len(cnts) > 0:
c = max(cnts, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
if radius < 250:
cv2.circle(frame, (int(x), int(y)), int(radius)
cv2.putText(frame, key + " dice", (int(x - radius), int(y - radius)), cv2.FONT_HERSHEY_SIMPLEX, 1.0,
colors[key], 2)
cv2.imshow("Frame", frame)
我想知道是否有更好的方法来处理具有恒定值的图像,以便识别RGB的颜色。目前它可以运行,但不稳定,我不能依靠该程序在所有条件下都能工作。我想知道如何实时解决该问题。