2016-12-20 29 views
1

OpenCVでは、一部の関数に「オーバーロードされたメンバ」の対応があります(たとえば、Canny edge detection)。opencvで「オーバーロードされたメンバ関数」を呼び出す

私の質問は、私のコードでこのオーバーロードされた関数をどのように呼び出すのですか?私が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) 

ありがとう

+0

どの機能を呼び出すと思いますか? – Miki

+0

最初のリンクにあるもの。 – Soltius

+0

いくつかのコードを表示できますか? [mcve] – Miki

答えて

1

電話をしようとしているoverloaded Canny functionは、OpenCV 3.2から入手できます。あなたは、文書でOpenCV 3.1の機能が存在しないことがわかります。

OpenCV 3.1を使用しているため、その機能はありません。

githubからOpenCV 3.2 (まだリリースされていません)をダウンロードしてコンパイルできます。main site

+0

ああ、ありがとう、私はその存在を知らなかったし、私はその文書を見ていた。いろいろな理由から、私は今すぐダウンロードできませんが、私がそれをやろうとすると、私はそれを試して答えを受け入れます。 – Soltius

+0

@Soltius OpenCV 3.2がリリースされました。あなたは自分でコンパイルすることを避けることができます; D – Miki

+0

うわー、彼らは2016年第4四半期にリリースすると言いました。ありがとう:) – Soltius

関連する問題