我正在使用opencv重映射功能将图像映射到另一个坐标系.但是,我的初步测试表明插值存在一些问题.在这里,我举一个简单的例子,一个图像的恒定0.1像素移位,到处都是0但位置[50,50].
import cv2
import numpy as np
prvs = np.zeros((100,80), dtype=np.float32)
prvs[50:51, 50:51] = 1.
grid_x, grid_y = np.meshgrid(np.arange(prvs.shape[1]), np.arange(prvs.shape[0]))
grid_y = grid_y.astype(np.float32)
grid_x = grid_x.astype(np.float32) + 0.1
prvs_remapped = cv2.remap(prvs, grid_x, grid_y, interpolation=cv2.INTER_LINEAR)
print(prvs_remapped[50,50])
print(prvs_remapped[50,49])
Run Code Online (Sandbox Code Playgroud)
给
0.90625
0.09375
Run Code Online (Sandbox Code Playgroud)
但是,考虑到线性插值方法,我期望0.9和0.1.我做错了什么还是这个数字问题?有没有更精确的重映射算法?
谢谢.
假设我有以下代码:
try:
import bar
except ImportError:
bar = None
@bar.SomeProvidedDecorator
def foo():
pass
Run Code Online (Sandbox Code Playgroud)
其中bar是一个可选的依赖项。如果 bar 未导入,则上面的代码将失败。有没有推荐的方法来处理这个问题?
我想出了:
try:
import bar
except ImportError:
bar = None
def foo():
pass
if bar is not None:
foo = bar.SomeProvidedDecorator(foo)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更好的方法来处理这个问题(即有没有办法保留装饰器语法)?