首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用OpenCV Python绘制一组点

如何使用OpenCV Python绘制一组点
EN

Stack Overflow用户
提问于 2022-03-25 17:58:20
回答 1查看 509关注 0票数 1

我有一组由数学表达式生成的点(坐标X和Y),我想要在屏幕的特定位置画出结果图形(我想确定所绘制图形的中心位置)。

我试着使用下面的代码来测试公式是否产生了正确的数字。但现在,我需要在一个特定位置的预先存在的图像上画出同样的轮廓。

代码语言:javascript
运行
复制
B = 185
L = 250
W = (L-B)/6
D = (L/2)-L/4

x = np.linspace(-L/2, L/2, 500)
y1 = []
y2 = []

for X in x:
    termo1 = sqrt((L**2 - 4*X**2) / (L**2 + 8*W*X + 4*W**2))
    termo2 = ((sqrt(5.5*L**2 + 11*L*W + 4*W**2) * (sqrt(3)*B*B - 2*D*sqrt(L**2 + 2*W*L + 4*W**2))
               ) / (sqrt(3)*B*L*(sqrt(5.5*L**2 + 11*L*W + 4*W**2) - 2*sqrt(L**2 + 2*W*L + 4*W**2))))
    termo3 = 1 - sqrt((L*(L**2 + 8*W*X + 4*W**2)) / (2*(L - 2*W)*X**2 +
                      (L**2 + 8*L*W - 4*W**2)*X + 2*L*W**2 + L**2*W + L**2*W + L**3))

    calculo = B/2 * termo1 * (1-termo2 * termo3)
    y1.append(calculo)

    calculo = -B/2 * termo1 * (1-termo2 * termo3)
    y2.append(calculo)



fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

plt.plot(x, y1, 'r')
plt.plot(x, y2, 'r')


plt.show()
EN

Stack Overflow用户

回答已采纳

发布于 2022-03-25 20:37:10

您可以通过创建onclick事件来实现这一点;当单击鼠标线并将其用作偏移量时,它将使用鼠标线.我认为这就是您所要求的?尽管有了当前的绘图x/y限制,但是它不会显示出来,这取决于您单击的位置,因此我在绘图的配置中添加了这些内容。

代码语言:javascript
运行
复制
import numpy as np
from math import sqrt
import matplotlib.pyplot as plt
import os
import matplotlib.image as mpimg


def onclick(event):
    global ix, iy
    ix, iy = event.xdata, event.ydata
    plt.plot(x + ix, y1+ iy, 'r')
    plt.plot(x + ix, y2+ iy, 'r')
    plt.show()
    fig.canvas.mpl_disconnect(cid)

    return 


B = 185
L = 250
W = (L-B)/6
D = (L/2)-L/4

x = np.linspace(-L/2, L/2, 500)
y1 = []
y2 = []

for X in x:
    termo1 = sqrt((L**2 - 4*X**2) / (L**2 + 8*W*X + 4*W**2))
    termo2 = ((sqrt(5.5*L**2 + 11*L*W + 4*W**2) * (sqrt(3)*B*B - 2*D*sqrt(L**2 + 2*W*L + 4*W**2))
               ) / (sqrt(3)*B*L*(sqrt(5.5*L**2 + 11*L*W + 4*W**2) - 2*sqrt(L**2 + 2*W*L + 4*W**2))))
    termo3 = 1 - sqrt((L*(L**2 + 8*W*X + 4*W**2)) / (2*(L - 2*W)*X**2 +
                      (L**2 + 8*L*W - 4*W**2)*X + 2*L*W**2 + L**2*W + L**2*W + L**3))

    calculo = B/2 * termo1 * (1-termo2 * termo3)
    y1.append(calculo)

    calculo = -B/2 * termo1 * (1-termo2 * termo3)
    y2.append(calculo)


fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.set_xlim([-500,500])
ax.set_ylim([-500,500])
ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')


coords = []
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71621266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档