在cv2.warpaffine()中提到插值方法

时间:2017-09-12 08:58:41

标签: python image opencv

如何在cv2.warpAffine()方法中使用双三次插值方法?我试图通过非中心点旋转图像。

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('1.jpg',0)
rows,cols = img.shape
M = cv2.getRotationMatrix2D((cols/2,rows/2),-40,1) 
dst = cv2.warpAffine(img,M,(cols,rows),flags=CV_INTER_CUBIC)
#cv2.Resize(src, dst, interpolation=CV_INTER_CUBIC)
plt.imshow(dst)

有了这个,我得到NameError: name 'CV_INTER_CUBIC' is not defined

1 个答案:

答案 0 :(得分:0)

OpenCV中具有前置CV_的常量中的大多数在较新版本中删除了它们,它们只是CONSTANT_VALUE而不是CV_CONSTANT_VALUE。例如,当您将颜色空间从BGR更改为HSV时,可以使用cv2.COLOR_BGR2HSV而不是{C}中使用的cv2.CV_COLOR_BGR2HSV。然而,即使对于C ++,插值方法的常量已经删除了前置CV_,因此它也是INTER_CUBIC而不是CV_INTER_CUBIC(尽管后者仍然被定义)。参见例如warpAffine()的文档引用插值方法的docs for resize()

基本分离是CV_常量来自原始C API。您可以看到所有C API常量定义here。您可以通过浏览文档来了解如何从新API中的常量中删除前置CV_,例如here

所以无论如何,问题的答案是使用标志cv2.INTER_CUBIC