python - OpenCV warpAffine和逆warpAffine不一致性

标签 python opencv image-processing

我正在使用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

那么,解决该问题的可能原因是什么?

最佳答案

这可能是一个数字问题,因为扭曲的坐标会映射回整数索引(即wh范围内)。

如果多次执行此操作(即扭曲,反转,扭曲,反转等),则可能会看到更差的效果。

关于python - OpenCV warpAffine和逆warpAffine不一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56353524/

相关文章:

c++ - std::cv::Mat 的 vector

c++ - OpenCV VideoCapture 仅在第一次调用 glutDisplayFunc 回调时返回空帧

opencv - 固定数量的关键点用于类似图像检测

python - 在 Pandas 中将 rolling_apply 与需要 2 个参数的函数一起使用

python - 通过 odeint(或 solve_ivp)计算系统对时变输入的响应

opencv - 在 OpenCV 上实现特征脸

image - 处理图像并找到外边缘。查找算法

python - 奇怪的多处理 block 导入 Numba 函数

python - 如何在 shell 中跳过用 nose.plugins.attrib.attr 修饰的类的 nosetests

python - 使用 Python 在非常大的图像中进行高性能变量模糊