梅西足球的轨迹

community_850 2021-12-17 23:27:21

使用 OpenCV 可以方便的剪切粘贴图像上的区域。例如下图是梅西在踢足球

通过剪切粘贴可以获得足球连续运行的轨迹

实现代码如下,需要补全TODO部分:

import cv2
import numpy as np

if __name__ == '__main__':
    img = cv2.imread('ball.jpg', cv2.IMREAD_COLOR)
    start = [493, 594]
    end = [112, 213]
    ball = img[start[0]:start[1], end[0]:end[1]]
    x_step = 101
    y_step = 10
    for i in range(-1, 4):
        # TODO(You): 请在此实现代码

    cv2.imshow("ball_continue", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

请实现粘贴足球部分的代码。

...全文
531 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大为慎独 2022-01-15
精选
  • 打赏
  • 举报
回复 10

左上角为坐标轴的(0,0)点,X是水平方向,Y是竖直方向。足球轨迹,在Y的方向是10递进。按照题目要求,给图片上逐步增加足球的数据,最后显示出来。

大为慎独 2022-01-15
  • 举报
回复 2
@大为慎独 注意足球是从左往右,X方向是增加;足球从下往上,Y方向是递减。
yzp1234567891 2024-04-16
  • 举报
回复
@大为慎独 没仔细看题目我丢
源代码•宸 2023-11-20
  • 打赏
  • 举报
回复 2

img切片里,第一个坐标是表示高,第二个坐标表示宽,所以高度要减小,宽度要增大

for i in range(-1, 4):
        # print(i)
        x_offset = x_step*i
        y_offset = y_step*i
        # 指的是高宽
        img[start[0]-y_offset:start[1]-y_offset, end[0]+x_offset:end[1]+x_offset] = ball

CSDN-Ada助手 2023-12-26
  • 举报
回复
@源代码•宸 没错,你的理解是正确的。在图像切片中,第一个坐标表示高度,第二个坐标表示宽度,所以在进行偏移时,需要将高度减小,宽度增大。你的代码实现是正确的。
ZPILOTE 2023-09-22
  • 打赏
  • 举报
回复

import cv2 
import numpy as np


if __name__ == '__main__':
    img = cv2.imread('ball.jpg', cv2.IMREAD_COLOR)
    # 默认图像坐标系是左上角(00),x为水平方向,y为垂直方向
    start = [493, 594]
    end = [112, 213]
    ball = img[start[0]:start[1], end[0]:end[1]]
    x_step = 101
    y_step = 10
    for i in range(-1, 4):
        x_offset = x_step * i
        y_offset = y_step * i
        # 足球从左偏下-->右偏上增加,所以x递增,y递减
        img[start[0] - y_offset:start[1] - y_offset, end[0] \
            + x_offset:end[1] + x_offset] = ball

    cv2.imshow("ball_continue", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
CSDN-Ada助手 2023-12-26
  • 举报
回复
@ZPILOTE 您的代码看起来很完整,通过循环和偏移量的计算,成功实现了足球连续运行的轨迹。如果您有其他关于图像处理的问题,也可以继续向我提问哦。
开心大爆炸 2022-08-11
  • 打赏
  • 举报
回复 4

python中data[ 1 : 10, 2:30 ]中 :是表示一个序列,逗号前 1:10表示X的范围从1到10, 2:30表示Y的范围是2到30
x_step 所在的线是平行于 X轴的水平线
y_step所在的直线是平行于Y轴的竖直线
所以,x_step是Y方向上的增加量
y_step是X方向上的增加量
再加上【大为慎独】博主的解释就明白了
-------------------From python和opencv的小白

  • 打赏
  • 举报
回复
x_offset = x_stepi
y_offset = y_stepi
img[start[0]-y_offset:start[1]-y_offset, end[0]+x_offset:end[1]+x_offset] = ball
Qt历险记 2022-04-23
  • 打赏
  • 举报
回复 2

真不错,学到了

21

社区成员

发帖
与我相关
我的任务
社区管理员
  • community_850
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧