为了账号安全,请及时绑定邮箱和手机立即绑定

使用 numpy 进行图像翻译

使用 numpy 进行图像翻译

森栏 2023-05-16 14:33:32
我想执行一定量的图像转换(垂直和水平移动图像)。问题是,当我将裁剪后的图像粘贴回画布时,我只得到一个白色的空白框。任何人都可以在这里发现问题吗?非常感谢img_shape = image.shape# translate image# percentage of the dimension of the image to translatetranslate_factor_x = random.uniform(*translate)translate_factor_y = random.uniform(*translate)# initialize a black image the same size as the imagecanvas = np.zeros(img_shape)# get the top-left corner coordinates of the shifted imagecorner_x = int(translate_factor_x*img_shape[1])corner_y = int(translate_factor_y*img_shape[0])# determine which part of the image will be pastedmask = image[max(-corner_y, 0):min(img_shape[0], -corner_y + img_shape[0]),             max(-corner_x, 0):min(img_shape[1], -corner_x + img_shape[1]),             :]# determine which part of the canvas the image will be pasted ontarget_coords =  [max(0,corner_y),                    max(corner_x,0),                    min(img_shape[0], corner_y + img_shape[0]),                    min(img_shape[1],corner_x + img_shape[1])]# paste image on selected part of the canvascanvas[target_coords[0]:target_coords[2], target_coords[1]:target_coords[3],:] = masktransformed_img = canvasplt.imshow(transformed_img)这就是我得到的:
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

对于图像翻译,您可以使用有点晦涩的numpy.roll功能。在这个例子中,我将使用白色画布,这样更容易可视化。


image = np.full_like(original_image, 255)

height, width = image.shape[:-1]

shift = 100


# shift image

rolled = np.roll(image, shift, axis=[0, 1])

# black out shifted parts

rolled = cv2.rectangle(rolled, (0, 0), (width, shift), 0, -1)

rolled = cv2.rectangle(rolled, (0, 0), (shift, height), 0, -1)

如果你想翻转图像使黑色部分在另一边,你可以同时使用np.fliplr和np.flipud。


结果:

//img1.sycdn.imooc.com//64632406000188d205970379.jpg

查看完整回答
反对 回复 2023-05-16
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

tx这是一个简单的解决方案,它仅使用数组索引按像素转换图像ty,不会翻转,并且还可以处理负值:


tx, ty = 8, 5  # translation on x and y axis, in pixels

N, M = image.shape

image_translated = np.zeros_like(image)


image_translated[max(tx,0):M+min(tx,0), max(ty,0):N+min(ty,0)] = image[-min(tx,0):M-max(tx,0), -min(ty,0):N-max(ty,0)]  


例子:

//img1.sycdn.imooc.com//6463241400010be003450123.jpg

(请注意,为简单起见,它不处理tx > M或 的情况ty > N)。



查看完整回答
反对 回复 2023-05-16
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信