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

如何用Python将热成像黑白图中白色像素转换为圆形特定形状?

Python实现方法

核心思路是先定位目标的中心位置,再基于该中心生成指定大小的圆形目标,替代原有的不规则区域。以下是基于OpenCV的具体实现步骤:

1. 图像预处理(降噪)

热传感器图像的噪声多为椒盐噪声,用中值滤波能有效去除这类噪声,同时保留目标的边缘信息:

import cv2
import numpy as np

# 读取灰度图像(黑白图)
img = cv2.imread("input_image.png", 0)
# 中值滤波降噪,核大小可根据噪声程度调整(需为奇数)
img_blur = cv2.medianBlur(img, 5)
# 确保图像二值化(白色为255,黑色为0)
_, img_binary = cv2.threshold(img_blur, 127, 255, cv2.THRESH_BINARY)

2. 定位目标中心

通过轮廓检测找到目标区域,计算其质心作为圆形的中心:

# 查找图像中的外部轮廓
contours, _ = cv2.findContours(img_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 取面积最大的轮廓(假设单目标场景,多目标可遍历所有轮廓)
target_contour = max(contours, key=cv2.contourArea)

# 计算轮廓质心
moments = cv2.moments(target_contour)
center_x = int(moments["m10"] / moments["m00"])
center_y = int(moments["m01"] / moments["m00"])

3. 生成圆形目标图像

创建与原图尺寸一致的黑色画布,在中心位置绘制填充的白色圆形。圆形半径可选择目标轮廓的最小外接圆半径,或根据需求手动指定:

# 计算目标的最小外接圆半径
(_, _), radius = cv2.minEnclosingCircle(target_contour)
radius = int(radius)

# 创建输出图像
output_img = np.zeros_like(img)
# 绘制填充圆形(最后一个参数-1表示填充)
cv2.circle(output_img, (center_x, center_y), radius, 255, -1)

# 保存结果
cv2.imwrite("output_image.png", output_img)
# 显示结果(可选)
cv2.imshow("Result", output_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

多目标场景适配

如果图像中有多个目标,只需遍历所有检测到的轮廓,分别计算每个目标的中心和半径,逐个绘制圆形即可:

output_img = np.zeros_like(img)
for contour in contours:
    # 过滤小面积噪声轮廓
    if cv2.contourArea(contour) < 50:
        continue
    moments = cv2.moments(contour)
    cx = int(moments["m10"] / moments["m00"])
    cy = int(moments["m01"] / moments["m00"])
    (_, _), r = cv2.minEnclosingCircle(contour)
    r = int(r)
    cv2.circle(output_img, (cx, cy), r, 255, -1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:55:24