2012-08-16 9 views
9

Ich möchte die Kanten der Hand extrahieren, aber ich bekomme das folgende Ergebnis. Ich habe versucht, die niedrige und hohe Schwelle einzustellen, aber ich kann immer noch nicht die gewünschte Ausgabe erhalten. Ich habe unten den Code und seine Ausgabe eingefügt. Was scheint das Problem zu sein?OpenCV Canny Edge Erkennung in C++

Dies ist die output image generiert durch den folgenden Code.

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

int main(){ 

    cv::Mat image= cv::imread("open_1a.jpg"); 
    cv::Mat contours; 
    cv::Mat gray_image; 

    cvtColor(image, gray_image, CV_RGB2GRAY); 

    cv::Canny(image,contours,10,350); 

    cv::namedWindow("Image"); 
    cv::imshow("Image",image); 

    cv::namedWindow("Gray"); 
    cv::imshow("Gray",gray_image); 

    cv::namedWindow("Canny"); 
    cv::imshow("Canny",contours); 
    cv::waitKey(0); 
} 

Antwort

14

Ändern Sie diese Zeile

cvtColor(image, gray_image, CV_RGB2GRAY); 

zu

std::vector<cv::Mat> channels; 
cv::Mat hsv; 
cv::cvtColor(image, hsv, CV_RGB2HSV); 
cv::split(hsv, channels); 
gray_image = channels[0]; 

Das Problem scheint in Grauskala, dass Ihre Hand ist sehr nah an dem grauen Hintergrund ist. Ich habe Canny auf den Farbton (Farbe) angewendet, weil die Hautfarbe ausreichend unterschiedlich sein sollte.

Auch die Canny Schwellen sehen ein bisschen verrückt aus. Die akzeptierte Norm ist, dass der höhere Wert 2x bis 3x niedriger sein sollte. 350 ist ein bisschen zu viel und es hilft nicht, das Hauptproblem zu lösen.

bearbeiten

mit diesen Schwellenwerten konnte ich extrahieren eine recht gute Kontur

cv :: Canny (Bild, Konturen, 35,90);

Wenn Sie ein wenig Theorie über den Algorithmus lesen, können Sie besser verstehen, was passiert und was Sie verbessern sollten. wiki canny auf Google

jedoch über die Verbesserung werden Sie viel bessere Ergebnisse liefern (vorausgesetzt, Sie verwenden eine bessere Schwellen als 10, 350. Versuchen (40, 120))

+0

vielen Dank! Ich werde mehr über den cleveren Algorithmus lesen. –