2017-01-22 3 views
-2

Ich habe diesen Code zum Anzeigen eines Bildes in C++ geschrieben.Zeige ein Bild mit C++

#include <opencv2/core/core.hpp> 
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <iostream> 
#include <string> 

using namespace std; 
using namespace cv; 

int main(int x,char*y) 
{ 
    string Image_Name = y[1]; 


    Mat image=imread(Image_Name); 


    if (image.empty()) 
    { 
     cout << "This is invalid input" << endl; 
     return -1; 
    } 

    namedWindow("Lenna", WINDOW_NORMAL); 

    imshow("Lenna",image); 

    waitKey(0); 

    return 0; 

} 

Wenn ich versuche, es zu laufen, zeigt Compiler mir diese Fehler:

„Severity Code Beschreibung Projektdateizeile Fehler C2440 'Initialisierung': aus 'char' zu nicht konvertieren‚std :: basic_string, std :: Zuordner>‘OpencvTest E: \ c \ Programmieren eines Bildes zeigt \ opencvtest \ source.cpp 12"

und:

„Severity Code Beschreibung Projektdatei Leitungsfehler (aktiv) kein geeigneter Konstruktor besteht aus umwandeln "char" zu "std :: basic_string, std :: Allocator>" OpencvTest e: \ Programmierung C \ Angezeigt ein Bild \ OpencvTest \ Source.cpp 12 "

Kann mir jemand mit diesem Fehler helfen?

Antwort

1

Geringfügige Fehler:

int main(int x,char*y) 

lesen Sollte
int main(int x, char*y[]) 

oder

int main(int x, char **y) 

Es gibt keinen Konstruktor von einem char zu std::string in der Tat zu konvertieren, nur von einem char* oder ein char und eine Intege r zählen.

Siehe http://en.cppreference.com/w/cpp/language/main_function und http://en.cppreference.com/w/cpp/string/basic_string/basic_string als Referenz.

Außerdem gibt es Standardnamen für diese 2 Argumente: argc - Argument Count und argv - Argument Werte. Bleibe lieber beim Standard.

Sie müssen auch überprüfen, ob argc gleich 2 ist, sonst gibt es kein zweites Argument zum Lesen.

Edit: Es macht mehr Sinn, nach argc >= 2 statt streng argc == 2 zu überprüfen, in diesem Fall wird das Programm die Argumente nach dem zweiten ignorieren.

+0

Danke für Ihre gute Antwort. Und es gibt nur ein Problem, das ich mit Ihrer Antwort habe: Warum sollte ich prüfen, ob "argc" gleich 2 ist? Becuase, wenn ich nicht verwende, Schleife für das Überprüfen, gibt es kein Problem mit meinem Code und es läuft erfolgreich. –

+0

If wird normalerweise eine "Anweisung" genannt, da sie im Gegensatz zu einer Schleife nicht wiederholt wird. Der Punkt der Überprüfung für 'argc == 2' ist sicherzustellen, dass es zwei Argumente gibt: Das erste Argument ist immer der ausführbare Name (zB "a.out" oder "main.exe" - ich weiß nicht, wie Visual Studio Namen die resultierende ausführbare Datei) und das zweite Argument ist der Image-Name. Wenn es weniger Argumente gibt, liest das Programm immer noch die Daten bei argv [1], aber es wird Unsinn sein oder das Programm mit dem Zugriff außerhalb der Grenzen zum Absturz bringen. – iksemyonov