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

Python绘图:如何为Blob矫正后的图形添加1px白色边框?

解决添加1px白色边框的问题

嘿,这事儿好办!要给矫正后的黑色Blob和背景之间加1px白色边框,我们可以利用双层绘图的思路:先画一层稍粗的白色线条作为边框基底,再在它上面画黑色的Blob线条,这样白色线条就会在黑色周围自然露出1px的边框效果。

下面是修改后的完整代码,重点看straighten_up函数里的绘图逻辑:

import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('input_image.png', 0)  # 修正参数:100改为0(灰度模式,符合边缘检测需求)
edges = cv2.Canny(img, 0, 255)  # 提取Blob边缘

# 计算Blob方向的代码保持不变
img = edges
y, x = np.nonzero(img)
x = x - np.mean(x)
y = y - np.mean(y)
coords = np.vstack([x, y])
cov = np.cov(coords)
evals, evecs = np.linalg.eig(cov)
sort_indices = np.argsort(evals)[::-1]
x_v1, y_v1 = evecs[:, sort_indices[0]]
x_v2, y_v2 = evecs[:, sort_indices[1]]

scale = 30
plt.plot([x_v1*-scale*2, x_v1*scale*2],
         [y_v1*-scale*2, y_v1*scale*2], color='red')
plt.plot([x_v2*-scale, x_v2*scale],
         [y_v2*-scale, y_v2*scale], color='blue')
plt.plot(x, y, 'k.')
plt.axis('equal')
plt.gca().invert_yaxis()
plt.show()

def straighten_up(x_v1, y_v1, coords):
    theta = np.arctan((x_v1)/(y_v1))
    rotation_mat = np.matrix([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
    transformed_mat = rotation_mat * coords
    x_transformed, y_transformed = transformed_mat.A
    
    fig, ax = plt.subplots(nrows=1, ncols=1)
    ax.set_facecolor((1.0, 0.47, 0.42))
    
    # 第一步:绘制白色边框(线宽设为3)
    plt.plot(x_transformed, y_transformed, color='white', linewidth=3)
    # 第二步:绘制黑色Blob(线宽设为1),覆盖在白色边框中间,露出1px白边
    plt.plot(x_transformed, y_transformed, color='black', linewidth=1)
    
    plt.axis('equal')
    plt.gca().invert_yaxis()  # 和第一个图保持一致的y轴方向,避免视觉混乱

straighten_up(x_v1, y_v1, coords)
plt.show()

关键修改说明:

  1. 修正了cv2.imread的参数:你原来写的100是无效值,换成0才能正确读取灰度图像,适配Canny边缘检测。
  2. 双层绘图逻辑:
    • 白色线条用linewidth=3作为基底,黑色线条用linewidth=1覆盖在中间,这样白色会在黑色四周各露出1px的边框(3px-1px=2px,均分在两侧)。
  3. 补充了坐标系对齐:加上plt.axis('equal')和plt.gca().invert_yaxis(),让矫正后的图和第一个方向分析图的坐标系保持一致,更直观。

如果你的Blob是散点而非连续线条,也可以用scatter实现边框:

# 散点版的边框实现
plt.scatter(x_transformed, y_transformed, color='black', edgecolor='white', linewidths=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:15:06