def color_detection(data, print_type='str'):
    '''определение цвета'''

    frame = bridge.imgmsg_to_cv2(data, 'bgr8')
    height, width = frame.shape[:2]
    y_start = int(height * 0.33)
    y_end = int(height * 0.67)
    x_start = int(width * 0.31)
    x_end = int(width * 0.69)

    cropped_frame = frame[y_start:y_end, x_start:x_end]
    
    if cropped_frame.size == 0:
        return
    

    if print_type == 'rgb':

        mean_bgr = cv2.mean(cropped_frame)[:3]
        mean_rgb = (int(mean_bgr[2]), int(mean_bgr[1]), int(mean_bgr[0]))  
        color = str(mean_rgb)
    

    elif print_type == 'str':

        # Получаем средние значения BGR
        mean_bgr = cv2.mean(cropped_frame)[:3]
        b, g, r = int(mean_bgr[0]), int(mean_bgr[1]), int(mean_bgr[2])
        
        
        if b > g + 20 and b > r + 20 and b > 100 + 20:  
            color = 'blue'
        elif g > b + 20 and g > r + 20 and g > 100:  
            color = 'green'
        elif r > b + 20 and r > g + 20 and r > 100:  
            color = 'red'
        elif r > 150 and g > 150 and b > 150:
            color= 'white'
        else:
            color = None

<<separator>>
    color_sub = rospy.Subscriber('main_camera/image_raw', Image, lambda img: color_detection(img, print_type='rgb'), queue_size=1)
    rospy.sleep(2)
    color_sub.unregister()