OpenCV: Zugeschnittenes Bild resultiert in einem komplett schwarzem Bild



  • Ich habe eine Methode implementiert, die Fläche für Fläche entlang der Polylines zuschneiden soll, dementsprechend sind es jeweils nicht-rechteckige Flächen. Nach genauem Befolgen zig Tutorials, bastelte ich diese Methode zusammen:

    void crop(Mat src) {
    	Scalar mu, sigma;
    	meanStdDev(src, mu, sigma);
    
    	Canny(src, dst, mu.val[0] - sigma.val[0], mu.val[0] + sigma.val[0], 3, false);		///adaptive canny for edge detection of the real image
    	cvtColor(dst, cdst, CV_GRAY2BGR);
    
    	HoughLinesP(dst, lines, 1, CV_PI / 2, 100, 50, 100);
    
    	sort(lines.begin(), lines.end(), vec4iSortByX());									///sort all lines by number
    
    	Vec4i current, previous;
    	Point pt1, pt2, ppt1, ppt2;
    
    	for (size_t i = 1; i < lines.size(); i++) {
    		current = lines[i];
    		pt1 = Point(current[0], current[1]);
    		pt2 = Point(current[2], current[3]);
    
    		previous = lines[i - 1];
    		ppt1 = Point(previous[0], previous[1]);
    		ppt2 = Point(previous[2], previous[3]);
    
    		vector<Point> pt;
    		pt.push_back(Point(previous[2], previous[3]));								///segment, calculate all polylines
    		pt.push_back(Point(previous[0], previous[1]));
    		pt.push_back(Point(current[0], current[1]));
    		pt.push_back(Point(current[2], current[3]));
    
    		Rect roi = boundingRect(pt);
    		contourRegion = src(roi);
    
    		Mat mask = Mat::zeros(contourRegion.size(), CV_8UC3); //just black
    		vector<Point> ROI_Poly;
    		approxPolyDP(pt, ROI_Poly, 1.0, true);
    		fillConvexPoly(mask, &ROI_Poly[0], ROI_Poly.size(), Scalar(0, 0, 0, 0), 8, 0);
    		cv::Mat fMask = cv::Mat(src.size(), CV_8UC3);
    		fMask.setTo(0);
    
    		// duplicate the mask on three channels
    		cv::Mat bgr_mask[3];
    		split(mask, bgr_mask);
    		cv::Mat in[] = { bgr_mask[0],bgr_mask[0],bgr_mask[0] };
    		cv::merge(in, 3, mask);
    
    		// copy the mask to a "full mask" of the same size as the image
    		mask.copyTo(fMask(roi));
    
    		Mat result = Mat(src.size(), CV_8UC3);
    
    		src.copyTo(result, fMask);
    		imshow("result", result(roi));
    		}
    }
    

    ... und mittlerweile bringt es mich zur Verzweiflung, denn ich kriege nur einen schwarzen Output raus, leider keinen Bildinhalt. Die Größe des Outputs passt, aber der Inhalt ist nun mal "keiner". Was mache ich falsch?



  • Ich gehe hier von einem Problem mit der Anwendung von OpenCV aus -> Grafikboard.



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    ab welcher transformation ist das resultat schwarz?



  • Leider bereits ab dem ersten bis zum letzten erzeugtem Polygon.


  • Mod

    schaut das resultat der Hough transform richtig aus?

    versuch mal als farbe was anderes als Scalar(0, 0, 0, 0), vielleicht Scalar(1, 1, 1, 1) oder Scalar(255, 255, 255, 255).



  • rapso schrieb:

    schaut das resultat der Hough transform richtig aus?

    versuch mal als farbe was anderes als Scalar(0, 0, 0, 0), vielleicht Scalar(1, 1, 1, 1) oder Scalar(255, 255, 255, 255).

    Habe ich bereits versucht, war leider erfolgslos. 😞


  • Mod

    poste vielleicht ein minimal repro case
    https://nopaste.xyz/

    eventuell testet das jemand der sich auskennt. (Ich nutze opencv bestenfalls einmal im jahr)


Anmelden zum Antworten