在opencv中调用“重载的成员函数”

时间:2016-12-20 10:36:16

标签: python-2.7 opencv overloading canny-operator

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

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

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

这是一个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)

由于

1 个答案:

答案 0 :(得分:1)

您尝试拨打的overloaded Canny function可从OpenCV 3.2获得。您可以在OpenCV 3.1的文档中看到该函数不存在。

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

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