使用 numpy 进行图像翻译

我想执行一定量的图像转换(垂直和水平移动图像)。


问题是,当我将裁剪后的图像粘贴回画布时,我只得到一个白色的空白框。


任何人都可以在这里发现问题吗?


非常感谢


img_shape = image.shape


# translate image

# percentage of the dimension of the image to translate

translate_factor_x = random.uniform(*translate)

translate_factor_y = random.uniform(*translate)


# initialize a black image the same size as the image

canvas = np.zeros(img_shape)


# get the top-left corner coordinates of the shifted image

corner_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 pasted

mask = 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 on

target_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 canvas

canvas[target_coords[0]:target_coords[2], target_coords[1]:target_coords[3],:] = mask

transformed_img = canvas


plt.imshow(transformed_img)

这就是我得到的:

http://img3.mukewang.com/646323f90001edbe05500310.jpg

森栏
浏览 121回答 2
2回答

慕标琳琳

对于图像翻译,您可以使用有点晦涩的numpy.roll功能。在这个例子中,我将使用白色画布,这样更容易可视化。image = np.full_like(original_image, 255)height, width = image.shape[:-1]shift = 100# shift imagerolled = np.roll(image, shift, axis=[0, 1])# black out shifted partsrolled = cv2.rectangle(rolled, (0, 0), (width, shift), 0, -1)rolled = cv2.rectangle(rolled, (0, 0), (shift, height), 0, -1)如果你想翻转图像使黑色部分在另一边,你可以同时使用np.fliplr和np.flipud。结果:

慕桂英4014372

tx这是一个简单的解决方案,它仅使用数组索引按像素转换图像ty,不会翻转,并且还可以处理负值:tx, ty = 8, 5  # translation on x and y axis, in pixelsN, M = image.shapeimage_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)]  例子:(请注意,为简单起见,它不处理tx > M或 的情况ty > N)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python