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()
请实现粘贴足球部分的代码。
左上角为坐标轴的(0,0)点,X是水平方向,Y是竖直方向。足球轨迹,在Y的方向是10递进。按照题目要求,给图片上逐步增加足球的数据,最后显示出来。
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
import cv2
import numpy as np
if __name__ == '__main__':
img = cv2.imread('ball.jpg', cv2.IMREAD_COLOR)
# 默认图像坐标系是左上角(0,0),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()
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
真不错,学到了