在视觉抓取中,通常需要对图片进行预处理,现整理如下:
1. 如何将图片拉伸到需要的尺寸
先贴python 代码
import cv2
from scipy import ndimage
image = cv2.imread('test.jpg')
image2x = ndimage.zoom(image, zoom=[2, 2, 1], order=0)
cv2.imwrite('1x.jpg', image)
cv2.imwrite('2x.jpg', image2x)
图片test.jpg
放在同级目录下,可得到
这里用到了scipy中的ndimage的zoom函数,可以知道
ndimage.zoom(image, zoom=[a, b, c], order=0)
a, b, c分别表示每个维度拉伸的维数的倍数
如果处理的是深度图片只有两个维度可以这么处理:
ndimage.zoom(depth_image, zoom=[2, 2], order=0)
对原理感兴趣的可以参看 https://blog.csdn.net/qq_34690929/article/details/79895938
2. 对图片进行填充
因为很多时候图片收入的大小并不是神经网络预期接受的大小,需要一定程度的扩充。另一种可能是,图片需要旋转。
import cv2
from scipy import ndimage
image = cv2.imread('test.jpg')
padding_width = int(image.shape[0] / 2)
pad_r = np.pad(image[:, :, 0], padding_width, 'constant', constant_values=0)
pad_g = np.pad(image[:, :, 1], padding_width, 'constant', constant_values=0)
pad_b = np.pad(image[:, :, 2], padding_width, 'constant', constant_values=0)
pad_r.shape = (pad_r.shape[0], pad_r.shape[1], 1)
pad_g.shape = (pad_g.shape[0], pad_g.shape[1], 1)
pad_b.shape = (pad_b.shape[0], pad_b.shape[1], 1)
image_padding = np.concatenate((pad_r, pad_g, pad_b), axis=2)
cv2.imwrite('origin.jpg', image)
cv2.imwrite('padding.jpg', image_padding)
原图
处理后