class ColorDetect(): def __init__(self): self.color = None def getColor(self): return self.color def detect_color_callback(self, 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])) self.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 and b > r and b > 100: self.color = 'blue' elif g > b and g > r and g > 100: self.color = 'green' elif r > b and r > g and r > 100: self.color = 'red' else: self.color = None #в MAIN для вызова функции должно быть: # cd = ColorDetect() #color_sub = rospy.Subscriber('main_camera/image_raw', Image, #lambda img: cd.detect_color_callback(img, print_type='rgb'), #queue_size=1) # print(cd.getColor()) #rospy.sleep(2) #color_sub.unregister()