OpenCV warpAffine и обратный warpAffine несовместимость - PullRequest
0 голосов
/ 29 мая 2019

Я использую функцию 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

enter image description here

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])

enter image description here

output = cv2.warpAffine(
        input,
        inv_trans,
        (w, h),
        flags=cv2.INTER_LINEAR,
        borderMode=cv2.BORDER_CONSTANT,
        borderValue=(0,0,0))
plt.imshow(output[:,:,::-1])

enter image description here

Так, какова возможная причина такой проблемы?

1 Ответ

0 голосов
/ 29 мая 2019

Вероятно, это числовая проблема, поскольку деформированные координаты возвращаются обратно в целочисленные индексы (то есть в диапазоне w и h).

Вероятно, вы увидите худший эффект, если сделаете это несколько раз, то есть деформации, инвертирования, деформации, инвертирования и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...