有没有办法在所有外部照明条件下识别物体

时间:2019-05-09 18:23:44

标签: python opencv

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的颜色。目前它可以运行,但不稳定,我不能依靠该程序在所有条件下都能工作。我想知道如何实时解决该问题。

0 个答案:

没有答案