You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python对指定颜色范围内的选中边界图像进行裁剪

实现按指定颜色范围裁剪图像的Python方案

实现思路

  • 读取目标图像后转换为HSV色彩空间,相比RGB色彩空间更适合做颜色范围的精准筛选
  • 校准指定颜色对应的HSV上下阈值,阈值可根据你的参考色灵活调整容错范围
  • 根据阈值生成掩膜,筛选出所有落在指定颜色范围内的像素区域
  • 计算掩膜中非零像素的最小外接矩形,即为选中边界
  • 按照该边界裁切原图像输出即可

依赖安装

运行前先安装依赖库:
pip install opencv-python numpy pillow

完整可运行代码

import cv2
import numpy as np
from PIL import Image

def crop_by_color_range(img_path, lower_hsv, upper_hsv, output_path="cropped_result.png"):
    # 读取输入图像
    img = cv2.imread(img_path)
    if img is None:
        raise ValueError("图像读取失败,请检查路径是否正确")
    # 将图像从BGR格式转换为HSV格式
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 生成符合颜色范围的掩膜
    mask = cv2.inRange(hsv_img, lower_hsv, upper_hsv)
    # 获取所有符合颜色要求的像素坐标
    y_coords, x_coords = np.nonzero(mask)
    if len(x_coords) == 0 or len(y_coords) == 0:
        raise ValueError("未检测到指定颜色范围内的像素,请调整阈值后重试")
    # 计算选中区域的边界坐标
    x_min, x_max = x_coords.min(), x_coords.max()
    y_min, y_max = y_coords.min(), y_coords.max()
    # 裁切图像并保存
    cropped = img[y_min:y_max+1, x_min:x_max+1]
    cropped_rgb = cv2.cvtColor(cropped, cv2.COLOR_BGR2RGB)
    Image.fromarray(cropped_rgb).save(output_path)
    return output_path

if __name__ == "__main__":
    # 示例为蓝色范围的HSV阈值,可根据你的目标颜色替换对应阈值
    lower_target = np.array([100, 50, 50])
    upper_target = np.array([130, 255, 255])
    crop_by_color_range("替换为你的输入图像路径", lower_target, upper_target)

阈值校准方法

如果不知道目标颜色对应的HSV阈值,可以截取目标颜色的小样本图,运行以下代码获取对应HSV值后,设置±10的容错范围作为上下限即可:

# 读取目标颜色小样图,取单个像素的HSV值作为参考
sample_bgr = cv2.imread("目标颜色小样图路径")[0][0]
sample_hsv = cv2.cvtColor(np.uint8([[sample_bgr]]), cv2.COLOR_BGR2HSV)[0][0]
print(f"目标颜色参考HSV值:{sample_hsv}")

内容的提问来源于stack exchange,提问作者Hamster Fever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:18:03