问:
在OpenCV中,通过resize将(w1, h1)尺寸的图片转化为(w2, h2)尺寸的图片,和通过warpAffine配合
矩阵变换进行仿射变换,插值模型都使用双线性(不考虑OpenCV LINEAR实现中特殊处理的几种情况),那么得到的结果是否相同呢?
答:
不相同,可以试试
[[255, 200, 0, 50],
[200, 255, 50, 0],
[ 0, 50, 255, 200],
[ 50, 0, 200, 255]]这个4 * 4的小图片,将它缩小一半:
>>> d = numpy.array([[255, 200, 0, 50],
... [200, 255, 50, 0],
... [ 0, 50, 255, 200],
... [ 50, 0, 200, 255]], numpy.uint8)
>>> cv2.resize(d, (2,2))
array([[228, 25],
[ 25, 228]], dtype=uint8)
>>> cv2.warpAffine(d, numpy.matrix([[0.5,0,0],[0,0.5,0]]), (2,2))
array([[255, 0],
[ 0, 255]], dtype=uint8)显然resize的结果正确(进行了插值),而warp的结果不正确(只保留了奇数行列)。这是为什么呢?大家可以先思考下,过段时间再公布答案。