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

如何用Python(OpenCV)将感兴趣区域轮廓外区域变白?

使用OpenCV实现轮廓外区域变白

完全可以用Python + OpenCV实现这个需求,以下是具体步骤和代码:

步骤说明

  1. 转换轮廓坐标格式:你提供的坐标是多个单点数组,需要合并为OpenCV要求的(N, 1, 2)形状的int32数组。
  2. 创建全白背景图:生成和原始图像尺寸、通道数一致的全白图像。
  3. 生成区域掩码:通过填充轮廓创建掩码,标记需要保留原始图像的区域。
  4. 合成最终图像:将原始图像的有效区域复制到全白背景上,实现轮廓外变白的效果。

完整代码示例

import cv2
import numpy as np

# 假设这是你获取的感兴趣区域多边形坐标列表
contour_points = [np.array([[877, 1050]], dtype=np.int32),
                  np.array([[876, 1051]], dtype=np.int32),
                  np.array([[1070, 1172]], dtype=np.int32)]

# 1. 转换为OpenCV兼容的轮廓格式
contour = np.concatenate(contour_points).reshape(-1, 1, 2)

# 2. 读取原始图像
img = cv2.imread("your_image_path.jpg")
if img is None:
    raise ValueError("无法读取图像,请检查路径是否正确")

# 3. 创建全白背景图
white_bg = np.ones_like(img) * 255

# 4. 创建区域掩码:轮廓内为255(白色),其余为0(黑色)
mask = np.zeros(img.shape[:2], dtype=np.uint8)
cv2.fillPoly(mask, [contour], 255)

# 5. 合成图像:保留轮廓内的原始图像,其余替换为白色
result = white_bg.copy()
result[mask == 255] = img[mask == 255]

# 可选:保存或显示结果
cv2.imwrite("result.jpg", result)
cv2.imshow("Result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意事项

  • 确认坐标的正确性:OpenCV中图像坐标格式为(x, y),其中x是水平方向(列),y是垂直方向(行)。如果你的坐标是(y, x)顺序,需要交换两个值,比如修改轮廓为contour = contour[..., [1, 0]]。
  • 若图像是单通道灰度图,代码同样适用,只需去掉通道相关的额外处理(np.ones_like会自动匹配单通道)。

内容的提问来源于stack exchange,提问作者Lee na-hyeon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:55:14