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

如何使用OpenCV将线条分割的三区域JPG图像转为0/1/2值分割图

三区域像素值批量统一转换最简实现方案

你手里已经有对应标注文件的前提下,用Python+OpenCV写个轻量脚本批量处理是最省事的,不需要手动逐张调整,几十上百张图几秒就能跑完。

操作流程

  • 先装运行依赖,命令行执行pip install opencv-python numpy即可
  • 核心逻辑是通过连通域检测自动识别被线条分割开的3个独立区域,按顺序给对应区域像素赋值0、1、2,不需要手动圈选区域
  • 处理后的结果务必存为PNG格式,别存回JPG——JPG的有损压缩会篡改边缘像素值,没法保证区域内像素值完全统一

可直接运行的批量处理代码

import cv2
import numpy as np
import os

# 改成你自己的文件路径
annotation_folder = "标注文件所在文件夹路径"
result_folder = "处理结果输出文件夹路径"
os.makedirs(result_folder, exist_ok=True)

for file_name in os.listdir(annotation_folder):
    if not file_name.lower().endswith(".jpg"):
        continue
    # 以灰度模式读取标注图
    annot_img = cv2.imread(os.path.join(annotation_folder, file_name), 0)
    # 提取分割线条、做连通域识别,自动拆分3个独立区域
    line_mask = (annot_img > 127).astype(np.uint8)
    region_count, region_label = cv2.connectedComponents(1 - line_mask)
    # 生成结果图,三个区域依次赋值0、1、2
    output = np.zeros_like(region_label, dtype=np.uint8)
    current_val = 0
    for label_id in range(1, region_count):
        if current_val >= 3:
            break
        output[region_label == label_id] = current_val
        current_val += 1
    # 存为PNG格式避免像素值被压缩篡改
    save_name = file_name.replace(".jpg", ".png")
    cv2.imwrite(os.path.join(result_folder, save_name), output)

如果你的标注文件里三个区域本身就是区分度很高的不同纯色,还能把连通域检测步骤删掉,直接按灰度值做映射赋值,处理速度会更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:51:16