Warum hat OpenCV keine spezielle Datenstruktur für die Region?

Ich benutze die Halcon Image Processing Library von MVTec seit einem halben Jahr und OpenCV seit einem Jahr.

1. Eine Sache, die ich festgestellt habe, dass Halcon OpenCV weit übertrifft, ist, dass OpenCV keine spezialisierte Datenstruktur für die Region hat.

Das ist viel Müll, wenn ich nur eine kleine Region auf großem Raum lagern möchte. Sollte OpenCV nicht über eine spezielle Datenstruktur für eine andere Region als die Mat-Klasse verfügen?

2. Die zweite, die das Ergebnis der vorherigen ist, ist, dass es schwierig ist, OpenCV durch Regionen zu iterieren.

Stellen Sie sich das Szenario vor, in dem nach dem Ausführen des Schwellenwerts 10 verbundene Regionsblöcke vorhanden sind, und ich möchte diese 10 Blöcke durchlaufen, um jeden dieser Blöcke zu verarbeiten. Soweit ich weiß, muss ich zuerst findContours verwenden, um alle Konturen jeder Region abzurufen, und dann drawContour, um diese Region abzurufen. Kann ich also sagen, dass die Regionen durch die Konturdaten gespeichert werden und jedes Mal, wenn ich die Region zurückholen möchte, muss ich drawContours aufrufen?

Mat myImage = imread("Path_To_Source_Image");
threshold(myImage, region, 128, 1, THRESH_BINARY);
vector<vector<Point>> contours;
findContours(region, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size, i++){
    Mat oneBlock(myImage.size(), CV_8U); 
    drawContours(oneBlock, contours, i, Scalar(255), -1);
        // Now I finally get my region

        //  ***************************************
        //
        //   Do my image procesing for that region
        //
        //  ***************************************
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage