我正在使用OpenCV warpAffine函数进行一些图像处理。奇怪的是,我在应用了warpAffine然后是反向warpAffine之后发现了这一点。处理后的图像与原始图像不一致,在原始图像的底部有一个像素边框。
img_path = '140028_199844.jpg'
img = cv2.imread(img_path,cv2.IMREAD_COLOR)
plt.imshow(img[:,:,::-1])
h,w,_=img.shape # h=220 w=173
src = np.array([[ 86., 109.5], [ 86. , 0. ], [-23.5, 0. ]])
dst = np.array([[192., 192.], [192. , 0.], [ 0. , 0.]])
trans = cv2.getAffineTransform(np.float32(src), np.float32(dst))
inv_trans = cv2.getAffineTransform(np.float32(dst), np.float32(src))
input = cv2.warpAffine(
img,
trans,
(384, 384),
flags=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT,
borderValue=(0, 0, 0))
plt.imshow(input[:,:,::-1])
output = cv2.warpAffine(
input,
inv_trans,
(w, h),
flags=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT,
borderValue=(0,0,0))
plt.imshow(output[:,:,::-1])
那么这个问题可能导致什么?
答案 0 :(得分:0)
这可能是一个数字问题,因为扭曲的坐标被映射回整数索引(即,在w
和h
范围内)。
如果多次执行此操作(即扭曲,反转,扭曲,反转等),您可能会看到更差的效果。
答案 1 :(得分:0)
将图像旋转180度时,Scipy ndimage.rotate(img,angle)帮助了我。似乎速度较慢,但对于一些图像来说,时间并不多。