python-2.7 - 在 opencv 中调用 "overloaded member function"

标签 python-2.7 opencv overloading canny-operator

在 OpenCV 中,某些函数具有“重载成员”对应项(例如,Canny edge detection)。

我的问题是:如何在我的代码中调用这个重载函数?如果我调用 cv2.Canny(),无论参数如何,它总是会调用“standard Canny”。

我在 Ubuntu 14 上使用 Python 2.7(与 C++ 相比,这可能是这个问题的一个问题?)和 OpenCV 3.1。

这是一个 MWE:

import cv2
import numpy as np

#getting gradient of image in x and y directions
def imgradient(img, sobel):
    sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=sobel)
    sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=sobel)
    return (sobelx,sobely)

#open image
IMG=cv2.imread("path_to_my_image") #replace with actual path
h = IMG.shape[0]; w = IMG.shape[1]

#Canny parameters : thresholds and kernel size
upper=5; lower=5; SIZE_KERNEL=3

#computing gradients (needed as arguments for overloaded Canny)
sobels=imgradient(IMG,3)
sobelx=sobels[0]
sobely=sobels[1];

output=np.zeros((h,w))

#trying to call overloaded Canny
cv2.Canny(sobelx,sobely,output,lower,upper);
#get error "only length-1 arrays can be converted to Python scalars"
#because the code is actually calling the standard Canny (second link)
edges = cv2.Canny(IMG, lower, upper, apertureSize=SIZE_KERNEL)
#works fine, but this is not the Canny I'm looking for (read this line in Obi-Wan's voice)

谢谢

最佳答案

overloaded Canny function您正在尝试调用可从 OpenCV 3.2 获得。您可以在文档中看到 OpenCV 3.1该功能不存在。

由于您使用的是 OpenCV 3.1,因此您没有该功能。

您可以从 github 下载 OpenCV 3.2 (仍未发布)并编译它。 来自 main site

关于python-2.7 - 在 opencv 中调用 "overloaded member function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41240285/

相关文章:

c++ - 在 C++ 中为 Date 类重载 >> 运算符会导致无限循环

c - GCC:允许 C99 中的重载函数

java - 将 Python 函数转换为 Java 应用蒙版到图像

python - 如何从函数python返回一个int值

python - Django REST Framework - 通过路由器将模型传递给 ViewSet

python-2.7 - 对整个笔记本应用舍入设置

python - opencv cmake 安装的 python 包路径错误

matlab - 计算对数极坐标箱上的定向梯度直方图

c++ - 看不懂C++11模板函数参数推导

python2.7错误: UnboundLocalError: local variable 'i' referenced before assignment