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

如何在OpenCV Python中获取矩形中心并绘制矩形间连线?

嘿,这个问题其实很基础但实用!不管你用什么工具,核心思路都是先拿到矩形的边界坐标或尺寸参数,然后通过简单的几何计算得到中心,之后再把这些中心点依次连起来就行。我给你分通用逻辑和几个常用工具的具体实现来讲解:

通用几何计算方法

对于任意矩形,只要你知道它的基础参数,就能算出中心:

  • 如果已知左上角坐标 (x1, y1) 和右下角坐标 (x2, y2),中心点 (cx, cy) 的计算公式是:
    cx = (x1 + x2) / 2
    cy = (y1 + y2) / 2
    
  • 如果已知左上角坐标 (x, y) 加上矩形的宽度 width 和高度 height,公式就变成:
    cx = x + width / 2
    cy = y + height / 2
    

这个逻辑适用于几乎所有场景,不管你用什么编程语言或绘图工具。

常用工具的具体实现例子

1. Python Matplotlib

如果你用Matplotlib绘制矩形,可以通过矩形对象的属性获取参数,再计算中心:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

# 创建几个矩形实例
rects = [
    Rectangle((1, 2), 3, 4),  # 参数:(左上角x,y), 宽度, 高度
    Rectangle((5, 6), 2, 3),
    Rectangle((8, 1), 4, 2)
]

# 批量计算每个矩形的中心
centers = []
for rect in rects:
    x_left, y_bottom = rect.get_xy()
    cx = x_left + rect.get_width() / 2
    cy = y_bottom + rect.get_height() / 2
    centers.append((cx, cy))

# 绘制矩形和中心连线
fig, ax = plt.subplots()
for rect in rects:
    ax.add_patch(rect)
# 用plot连接所有中心点
ax.plot([c[0] for c in centers], [c[1] for c in centers], color='crimson', linewidth=2)

# 调整显示范围,确保所有元素可见
ax.set_xlim(0, 13)
ax.set_ylim(0, 10)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()

2. Pygame

Pygame的Rect对象自带center属性,直接调用就能拿到中心点,非常省心:

import pygame

pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

# 创建矩形对象
rect_list = [
    pygame.Rect(100, 100, 150, 100),
    pygame.Rect(300, 250, 120, 80),
    pygame.Rect(500, 150, 180, 120)
]

# 直接获取每个矩形的中心点
center_points = [rect.center for rect in rect_list]

running = True
while running:
    screen.fill((255, 255, 255))
    
    # 绘制所有矩形
    for rect in rect_list:
        pygame.draw.rect(screen, (0, 0, 255), rect, 2)
    # 绘制中心连线(False表示不闭合)
    pygame.draw.lines(screen, (255, 0, 0), False, center_points, 3)
    
    # 处理退出事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

3. HTML5 Canvas

在网页Canvas里,先定义好每个矩形的参数,再按通用公式计算中心,最后用路径绘制连线:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

// 定义矩形数组:每个元素为 [左上角x, 左上角y, 宽度, 高度]
const rects = [
    [50, 50, 100, 80],
    [200, 150, 120, 90],
    [350, 80, 150, 100]
];

// 计算所有中心点
const centers = rects.map(rect => {
    const [x, y, w, h] = rect;
    return [x + w / 2, y + h / 2];
});

// 绘制矩形
ctx.strokeStyle = '#0066cc';
ctx.lineWidth = 2;
rects.forEach(rect => ctx.strokeRect(...rect));

// 绘制中心连线
ctx.strokeStyle = '#e63946';
ctx.lineWidth = 3;
ctx.beginPath();
ctx.moveTo(centers[0][0], centers[0][1]);
centers.slice(1).forEach(center => ctx.lineTo(center[0], center[1]));
ctx.stroke();

核心就是先拿到矩形的位置和尺寸,算出中心,再把这些点按顺序连接——不管用什么工具,这个逻辑都是通的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:47:47