OpenCV: howto Verwendung der Maske parameter für feature point detection (SURF -)
Ich will limit a SurfFeatureDetector auf eine Reihe von Regionen (Maske). Für einen test definiere ich nur eine einzige Maske:
Mat srcImage; //RGB source image
Mat mask = Mat::zeros(srcImage.size(), srcImage.type());
Mat roi(mask, cv::Rect(10,10,100,100));
roi = Scalar(255, 255, 255);
SurfFeatureDetector detector();
std::vector<KeyPoint> keypoints;
detector.detect(srcImage, keypoints, roi); //crash
//detector.detect(srcImage, keypoints); //does not crash
Wenn ich den pass der "roi" als die Maske, die ich bekomme diese Fehlermeldung:
OpenCV Error: Assertion failed (mask.empty() || (mask.type() == CV_8UC1 && mask.size() == image.size())) in detect, file /Users/ux/Downloads/OpenCV-iOS/OpenCV-iOS/../opencv-svn/modules/features2d/src/detectors.cpp, line 63
Was ist Los mit diesem? Wie kann ich mich richtig übergeben Sie eine Maske, um die SurfFeatureDetector "erkennen" - Methode?
Grüße,
InformationsquelleAutor Hyndrix | 2013-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Dinge über die Maske.
CV_8U
. In deinem Fall ist die Maske des Typs srcImage.Typ(), der ein 3-Kanal-matrixroi
auf den Detektor, sondern Sie sollte vorbeimask
. Wenn Sie änderungen anroi
Sie verändern sich auchmask
.sollten die folgenden arbeiten
Ich denke, es sollte
Scalar(255);
als die Maske ist 1-dimensional.Du hast Recht, danke. Bearbeitet
InformationsquelleAutor Alexey
Ich geheftet den ROI, den code auf einige der bestehenden code, mit dem ich arbeiten war, mit den folgenden änderungen hat es bei mir geklappt
Ohne die änderungen auf die Art und die Verwendung von
mask
stattroi
als Maske, ich würde einen Laufzeitfehler erhalten, als gut. Dies macht Sinn, da die detect-Methode will eine Maske-es sollte die gleiche Größe wie das ursprüngliche Bild, und der roi ist nicht (es ist ein 100x100 Rechteck). Um zu sehen, das visuell versuchen, anzeigen der Maske und der roiDer Typ hat auch; die Maske sollte ein Kanal, während Sie Ihre Bild-Typ ist wahrscheinlich von Typ 16, die Karten zu
CV_8UC3
, ein triple-channel-BildInformationsquelleAutor alrikai
Wenn Sie schauen, um die gleiche für die unregelmäßige Maske dann:
Dann wie gewohnt, erzeugen SIFT/SURF/... Zeiger
//Smart-pointer für SIFT feature-Detektors.
InformationsquelleAutor Spandan