2016-12-20 4 views
1

In OpenCV verfügen einige Funktionen über ein "überladenes Element" (z. B. Canny edge detection).Aufrufen einer "überladenen Elementfunktion" in opencv

Meine Frage ist: Wie kann ich diese überladene Funktion in meinem Code aufrufen? Wenn ich cv2.Canny() anrufe, wird es immer "standard Canny" aufrufen, egal welche Argumente.

Ich verwende Python 2.7 (? Vielleicht wird ein Thema für dieses Problem sein, im Vergleich zu C++) und OpenCV 3.1, auf Ubuntu 14.

Hier ist ein 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) 

Danke

+0

Welche Funktion erwarten Sie zu rufen? – Miki

+0

Der erste Link. – Soltius

+0

Können Sie Code anzeigen? [mcve] – Miki

Antwort

1

Die overloaded Canny function, die Sie anrufen möchten, ist von OpenCV 3.2 verfügbar. Sie können im Dokument für OpenCV 3.1 sehen, dass die Funktion nicht vorhanden ist.

Da Sie OpenCV 3.1 verwenden, haben Sie diese Funktion nicht.

Sie können die OpenCV 3.2 (noch nicht freigegeben) von der github herunterladen und kompilieren. von der main site

+0

Oh wow, vielen Dank, ich hatte keine Ahnung, dass 3.2 existierte und dass ich diese Dokumentation betrachtete. Aus verschiedenen Gründen kann ich es momentan nicht herunterladen, aber wenn ich es tue, probiere ich es aus und akzeptiere deine Antwort. – Soltius

+0

@Soltius OpenCV 3.2 ist jetzt veröffentlicht. Sie können es vermeiden, es selbst zu kompilieren; D – Miki

+0

Wow, sie sagten, sie würden im vierten Quartal 2016 veröffentlichen und sie blieben dabei! Vielen Dank :) – Soltius

Verwandte Themen