如何在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
答案 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
。