OpenCV 'std::logic_error'



  • Hallo

    Ich habe die OpenCV Bibliothek installiert und in meinem Make file auch korrekt gelinked. Nun wollte ich dieses Tutorial im Netz nacharbeiten:

    http://docs.opencv.org/2.4/doc/tutorials/introduction/load_save_image/load_save_image.html Hier der Code:

    #include <iostream>
    
    #include <cv.h> // OpenCV base class
    #include <highgui.h> // for visualizing and video capturing
    #include <opencv2/imgproc/imgproc.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char ** argv){
    
    //___________________________________________________________________
    
    char* imageName = argv[1];
    
     Mat image;
     image = imread( imageName, 1 );
    
     if( argc != 2 || !image.data )
     {
       cout << " No image data \n ";
       return -1;
     }
    
     Mat gray_image;
     cvtColor( image, gray_image, CV_BGR2GRAY );
    
     imwrite( "./Gray_Image.jpg", gray_image );
    
     namedWindow( imageName, CV_WINDOW_AUTOSIZE );
     namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );
    
     imshow( imageName, image );
     imshow( "Gray image", gray_image );
    
     waitKey(0);
    
    return 0;
    }
    

    Ich habe das Tutorial mehrfach gelesen und vom Konzept verstehe ich was passiert. Beim compilieren erhalte ich zudem keine Fehlermeldung.

    Beim Ausführen des Programms kommt dann aber folgender Fehler:

    terminate called after throwing an instance of 'std::logic_error'
      what():  basic_string::_M_construct null not valid
    Abgebrochen
    

    Meine Fragen dazu sind:

    1.) Wie ist dieser Fehler zu verstehen? Ich kenne diese Fehlermeldung noch nicht. Google bringt mich auf alle möglichen Seiten aber ich konnte die Frage nicht klären.

    2.) Was ist falsch an dem Code?

    Danke euch für Hilfe und Grüße

    P.S.
    Ich bin mir relativ sich das es nicht am compilieren liegt, aber falls doch hier mal mein Make file. Ich compiliere es dann nur mit dem Befehl make (und ich nenne das Programm liebevoll ObserverMain 🙂 ):

    .PHONY: all clean
    
    GXX := g++ 
    GXXFLAGS := -c -g -Wall -std=c++14 `pkg-config --cflags opencv`
    LDFLAGS := -g  
    LIBS = `pkg-config --libs opencv`
    objs := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
    deps := $(objs:.o=.d)
    
    all: ObserverMain
    
    -include $(deps)
    
    ObserverMain: $(objs) 
    	$(GXX) $(LDFLAGS) $(LIBS) -o $@ $^
    
    %.d: %.cpp
    	$(GXX) -MM -MT "$@ $(patsubst %.d,%.o,$@)" -MF $@ $< 
    
    %.o: %.cpp
    	$(GXX) $(GXXFLAGS) $<
    
    clean:
    	rm -f $(objs) $(deps)
    	rm -f ObserverMain
    	clear screen && ls -l -a
    


  • Vielleicht solltest du erst testen, ob du genug Aufrufargumente hast und sie dann verwenden. Andersrum ist es irgendwie blöd ...


Anmelden zum Antworten