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

OpenCV如何利用阈值分割结果将图案叠加到阈值图像的黑色区域

Python+OpenCV实现不规则区域图案填充

核心思路

利用阈值图生成布尔掩码,通过numpy的数组索引直接匹配替换对应位置的像素,无需判断区域几何形状,完美适配不规则的黑色填充区域。

前置条件

  • 阈值图与图案图尺寸完全一致
  • 阈值图为单通道二值图(黑色像素值为0,白色像素值为255,非标准二值图可先做二值化处理)
  • 图案图为3通道BGR格式(OpenCV默认读取格式)

实现代码

import cv2
import numpy as np

# 读取图像
# 单通道读取阈值图
thresh_img = cv2.imread("your_threshold_img_path.png", 0)
# 读取3通道图案图
pattern_img = cv2.imread("your_pattern_img_path.png")
# 将阈值图转为3通道作为结果底图
result_img = cv2.cvtColor(thresh_img, cv2.COLOR_GRAY2BGR)

# (可选)如果阈值图不是标准二值图,先执行二值化
# _, thresh_img = cv2.threshold(thresh_img, 127, 255, cv2.THRESH_BINARY)

# 生成黑色区域的布尔掩码:像素值为0的位置即为需要填充的区域
fill_mask = thresh_img == 0

# 直接将图案图对应掩码位置的像素赋值到结果图
result_img[fill_mask] = pattern_img[fill_mask]

# (可选)如果需要半透明叠加效果,替换上一步的赋值逻辑为以下代码,调整权重参数即可
# result_img[fill_mask] = cv2.addWeighted(result_img[fill_mask], 0.3, pattern_img[fill_mask], 0.7, 0)

# 保存结果
cv2.imwrite("result.png", result_img)

逻辑说明

  • 布尔索引会自动匹配所有符合thresh_img == 0条件的像素位置,不管区域形状是否规则,都能精准替换
  • 不需要做切片、轮廓提取等额外操作,运行效率极高,适配任意尺寸的输入图像
  • 支持直接替换、半透明叠加两种效果,按需调整即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:04