[ cv2[opencv] ]


基础

hsv_image = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

hsv_image是通过将BGR图像转换为HSV颜色空间而得到的新图像。它包含了与原始图像相同的尺寸,但颜色通道由BGR转换为HSV。

具体地说,hsv_image是一个三维数组,其形状与原始图像相同(通常是高度 x 宽度 x 3)。它的三个通道分别表示色相(Hue)、饱和度(Saturation)和明度(Value),这些通道的值范围如下:

色相(Hue)通道:取值范围为0到179,表示不同类型的颜色。
饱和度(Saturation)通道:取值范围为0到255,表示颜色的纯度或鲜艳度。值为0意味着灰度色调,值越高表示越鲜艳的颜色。
明度(Value)通道:取值范围为0到255,表示颜色的亮度。值为0表示黑色,值为255表示最亮的颜色。
通过在hsv_image中访问相应的通道,您可以获取每个像素点在HSV颜色空间中的数值。

例如,如果您想要获取图像的色相通道,可以使用hsv_image[:, :, 0]来访问。类似地,您可以使用hsv_image[:, :, 1]和hsv_image[:, :, 2]来获取饱和度和明度通道的值。

希望能够解答您的疑问!如果还有其他问题,请随时提问。
  1. 色相
hsv_image[:, :, 0]
  1. 饱和度
hsv_image[:, :, 1]
  1. 明度通道的值
hsv_image[:, :, 2]来获取和

掩膜

mask_image_2 = cv2.inRange(
            hsv_image,
            green_lower_color_range_2,
            green_upper_color_range_2
        ) # 过滤图片的 绿色2 掩膜

交

direction_mask_image = cv2.bitwise_and(mask_image_2, direction_mask)

图片简单处理案例1:

  1. 获取图片中的绿色
def image_filter_green():
    img = cv2.imread("4.png")  # 读取图片

    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 将图片转换为HSV颜色空间

    # 定义绿色的范围(在HSV颜色空间中)
    lower_green = np.array([40, 50, 50])
    upper_green = np.array([80, 255, 255])

    # 创建掩膜,根据绿色的范围将图像中的绿色部分设置为白色,其他部分设置为黑色
    mask = cv2.inRange(hsv_img, lower_green, upper_green)

    # 对原始图像进行掩膜操作,提取绿色部分
    green_img = cv2.bitwise_and(img, img, mask=mask)

    # 保存提取的绿色部分图像
    cv2.imwrite("green_image.png", green_img)

    # 显示结果
    cv2.imshow("Green Image", green_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  1. 获取图片中的红色
def image_filter_red():
    img = cv2.imread("4.png")  # 读取图片
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 将图片转换为HSV颜色空间

    # 定义红色的范围(在HSV颜色空间中)
    lower_red1 = np.array([0, 50, 50])
    upper_red1 = np.array([10, 255, 255])
    lower_red2 = np.array([170, 50, 50])
    upper_red2 = np.array([180, 255, 255])

    # 创建掩膜,根据红色的范围将图像中的红色部分设置为白色,其他部分设置为黑色
    mask1 = cv2.inRange(hsv_img, lower_red1, upper_red1)
    mask2 = cv2.inRange(hsv_img, lower_red2, upper_red2)
    mask = cv2.bitwise_or(mask1, mask2)

    # 对原始图像进行掩膜操作,提取红色部分
    red_img = cv2.bitwise_and(img, img, mask=mask)

    # 保存提取的红色部分图像
    cv2.imwrite("red_image.png", red_img)

    # 显示结果
    cv2.imshow("Red Image", red_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  1. 合并绿色和红色
def image_merged():
    green_img = cv2.imread("green_image.png")  # 读取绿色部分图像
    red_img = cv2.imread("red_image.png")  # 读取红色部分图像

    # 将两个图像进行加法运算,实现图像的叠加
    merged_img = cv2.add(green_img, red_img)

    # 保存合并后的图像
    cv2.imwrite("merged_image.png", merged_img)

    # 显示结果
    cv2.imshow("Merged Image", merged_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  1. 选中图片中的红色和绿色...(需要修改颜色的HSV范围)
def test_2():
    # 读取图片
    image = cv2.imread('1.png')
    image1 = cv2.imread("merged_image.png", flags=cv2.IMREAD_GRAYSCALE)

    # 将图片从BGR转换为HSV颜色空间
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

    # 定义绿色的HSV范围
    lower_green = np.array([40, 50, 50],  dtype=np.uint8)  # 这里只选择绿色
    upper_green = np.array([80, 255, 255] , dtype=np.uint8)  # 这里只选择绿色

    # 使用掩膜获得绿色区域
    mask = cv2.inRange(hsv, lower_green, upper_green)

    # 取交集
    mask_image = cv2.bitwise_and(mask, image1)

    # 查找轮廓
    contours, hierarchy = cv2.findContours(mask_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    # 绘制绿色轮廓
    for contour in contours:
        area = cv2.contourArea(contour)
        # if area > 1000: # 设置最小面积
        x, y, w, h = cv2.boundingRect(contour)
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
        M = cv2.moments(contour)  # 计算轮廓的矩
        if M["m00"] != 0:
            cX = int(M["m10"] / M["m00"])  # 计算轮廓的中心点坐标
            cY = int(M["m01"] / M["m00"])
            center_list.append((cX, cY,))

    # 各个轮廓之间连线
    for a, b in zip(center_list[0::], center_list[1::]):
        cv2.line(image, a, b,(0, 255, 0), 2)

    # 显示结果
    cv2.imshow('image', image)
    # cv2.imshow('mask_image', mask_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

图片:

  1. 素材图片 总图

  2. 获取出的绿色 获取出总图的绿色

  3. 获取出的红色 获取出总图的红色

  4. 合并获取的红色和绿色 合并获取出的红色和绿色

去除图片中的白色像素

去除图片中的黑色像素