【问题标题】:mentioning interpolation method in cv2.warpaffine()在 cv2.warpaffine() 中提到插值方法
【发布时间】:2017-09-12 08:58:40
【问题描述】:

如何在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

【问题讨论】:

  • 检查link.中warpaffine的标志
  • 我已经尝试过使用它。我收到以下错误 ModuleNotFoundError: No module named 'cv' 我知道还有其他页面有相同的问题。我也试过了,但仍然没有让我跑步:(过去 10 天我一直在努力!
  • 你能发一个minimum verifiable的例子吗?你应该使用cv2,而不是cv。常量应该是cv2.INTER_BICUBIC
  • 如下所述以及在 cmets 中,它是 cv2.INTER_CUBIC 而不是 cv2.INTER_BICUBIC

标签: python image opencv


【解决方案1】:

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

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

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

【讨论】:

  • 只是一点评论。 CV2.INTER_BICUBIC 不存在。它只是 cv2.INTER_CUBIC
  • 糟糕。谢谢你,我什至在打字的时候一直写INTER_CUBIC,但我以为我搞砸了!
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 2019-07-10
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多