2017-01-10 6 views
1

Ich bin neu in der Verwendung von OpenCV. Ich benutze C++ in Visual Studio 2013 und OpenCV 3.1. Ich möchte Canny Kanten berechnen und hier ist mein Code:OpenCV 3.1 Warnung und Absturz bei der Verwendung von UMat

UMat getImage() 
{ 
    return imread("...\\myPic.jpg").getUMat(ACCESS_FAST); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    UMat u; 
    u = getImage(); 

    cv::Canny(u, u, 100, 50); 

    namedWindow("Display window", WINDOW_AUTOSIZE);// Create a window for display. 
    imshow("Display window", u); 

    getchar(); 

    return 0; 
} 

Ich kann das Ergebnis oder ein Bild nicht sehen. Statt dessen sehe ich dieses Fenster: enter image description here

Was ist los? Ich stelle fest, dass ich mein Bild im Fall der Verwendung vonInstanz sehen kann.

Antwort

0

Es gibt 2 Probleme mit dem Code, den Sie geschrieben haben.

1) Imshow wird Ihr Bild nicht ohne eine leichte Pause richtig angezeigt. Sie müssen die Funktion waitkey (0) nach imshow hinzufügen, damit das Bild das Ergebnis korrekt anzeigt.

2) Bei der Verarbeitung von UMat-Variablen ist es besser, die Referenzmatrix zu empfangen und zurückzugeben, anstatt die gesamte Matrix zurückzugeben, da sich der UMat-Speicher nicht immer im CPU-Bereich befindet. Hier ist, wie Ihr Code wie

void getImage(cv::OutputArray u) 
{ 
    cv::imread("...\\myPic.jpg").getUMat(cv::ACCESS_FAST).copyTo(u); 
} 

    int main(int argc, const char** argv) 
    { 
     cv::UMat u; 
     getImage(u); 

     cv::Canny(u, u, 100, 50); 

     cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);// Create a window for display. 
     cv::imshow("Display window", u); 
     cv::waitKey(0); 
     getchar(); 

     return 0; 
    } 

Viel Glück

aussehen sollte
Verwandte Themen