要使用 OpenCV 识别并标记出图片中的深浅红色、深浅蓝色或深浅绿色的物体,可以按照以下步骤进行:

  1. 导入必要的库:
import cv2
import numpy as np
  1. 加载图片并转换为 HSV 颜色空间:
image = cv2.imread('image.jpg')
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
  1. 定义深浅红色、深浅蓝色和深浅绿色的颜色范围:
red_lower = np.array([0, 100, 100], dtype=np.uint8)
red_upper = np.array([10, 255, 255], dtype=np.uint8)
light_red_lower = np.array([170, 100, 100], dtype=np.uint8)
light_red_upper = np.array([180, 255, 255], dtype=np.uint8)

blue_lower = np.array([90, 100, 100], dtype=np.uint8)
blue_upper = np.array([130, 255, 255], dtype=np.uint8)
light_blue_lower = np.array([100, 100, 100], dtype=np.uint8)
light_blue_upper = np.array([130, 255, 255], dtype=np.uint8)

green_lower = np.array([40, 100, 100], dtype=np.uint8)
green_upper = np.array([80, 255, 255], dtype=np.uint8)
light_green_lower = np.array([35, 100, 100], dtype=np.uint8)
light_green_upper = np.array([80, 255, 255], dtype=np.uint8)
  1. 对图像进行颜色过滤,分别提取深浅红色、深浅蓝色和深浅绿色的物体:
red_mask = cv2.inRange(hsv_image, red_lower, red_upper)
red_light_mask = cv2.inRange(hsv_image, light_red_lower, light_red_upper)
blue_mask = cv2.inRange(hsv_image, blue_lower, blue_upper)
blue_light_mask = cv2.inRange(hsv_image, light_blue_lower, light_blue_upper)
green_mask = cv2.inRange(hsv_image, green_lower, green_upper)
green_light_mask = cv2.inRange(hsv_image, light_green_lower, light_green_upper)
  1. 对颜色掩码进行形态学操作,以去除噪点:
kernel = np.ones((5, 5), np.uint8)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_OPEN, kernel)
red_light_mask = cv2.morphologyEx(red_light_mask, cv2.MORPH_OPEN, kernel)
blue_mask = cv2.morphologyEx(blue_mask, cv2.MORPH_OPEN, kernel)
blue_light_mask = cv2.morphologyEx(blue_light_mask, cv2.MORPH_OPEN, kernel)
green_mask = cv2.morphologyEx(green_mask, cv2.MORPH_OPEN, kernel)
green_light_mask = cv2.morphologyEx(green_light_mask, cv2.MORPH_OPEN, kernel)
  1. 检测并绘制深浅红色、深浅蓝色和深浅绿色物体的轮廓,并标记颜色名称:
contours, _ = cv2.findContours(red_mask + red_light_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    area = cv2.contourArea(contour)
    if area > 100:
        cv2.drawContours(image, [contour], -1, (0, 0, 255), 2)
        cv2.putText(image, 'Red', (contour[0][0][0], contour[0][0][1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2)

contours, _ = cv2.findContours(blue_mask + blue_light_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    area = cv2.contourArea(contour)
    if area > 100:
        cv2.drawContours(image, [contour], -1, (255, 0, 0), 2)
        cv2.putText(image, 'Blue', (contour[0][0][0], contour[0][0][1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)

contours, _ = cv2.findContours(green_mask + green_light_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    area = cv2.contourArea(contour)
    if area > 100:
        cv2.drawContours(image, [contour], -1, (0, 255, 0), 2)
        cv2.putText(image, 'Green', (contour[0][0][0], contour[0][0][1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  1. 显示带有标记的图像:
cv2.imshow('Color Recognition', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:以上代码仅提供了一个基本的框架,具体的颜色范围和形态学操作的参数可能需要根据实际情况进行调整。

OpenCV 图片颜色识别:识别并标记深浅红色、蓝色和绿色物体

原文地址: https://www.cveoy.top/t/topic/o705 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录