Von OpenCV doc
Dies ist die Proxy-Klasse ist Arrays in OpenCV Funktionen Eingang schreibgeschützt für das Bestehen. Es ist definiert als:
typedef const _InputArray& InputArray;
wo _InputArray
eine Klasse ist, die aus Mat
konstruiert werden kann, Mat_<T>
, Matx<T, m, n>
, std::vector<T>
, std::vector<std::vector<T> >
oder std::vector<Mat>
. Es kann auch aus einem Matrixausdruck konstruiert werden.
Da es sich hauptsächlich um die Klasse der Implementierungsklasse handelt und deren Schnittstelle sich in zukünftigen Versionen ändern kann, beschreiben wir sie nicht im Detail. Es gibt ein paar wichtigen Dinge, obwohl, die im Auge behalten werden sollen:
Wenn Sie im Referenz-Handbuch oder in OpenCV Source-Code eine Funktion, die InputArray
nimmt, bedeutet dies, dass Sie tatsächlich Mat
passieren können, Matx
, vector<T>
usw. (siehe oben die vollständige Liste).
Optionale Eingabeargumente: Wenn einige der Eingabearrays möglicherweise leer sind, übergeben Sie cv::noArray()
(oder einfach cv::Mat()
, wie Sie wahrscheinlich zuvor getan haben). Die Klasse ist ausschließlich zum Übergeben von Parametern vorgesehen. Das heißt, normalerweise sollten Sie keine Klassenmitglieder, lokale und globale Variablen dieses Typs deklarieren. Wenn Sie eine eigene Funktion oder eine Klassenmethode entwerfen möchten, die mit Arrays verschiedener Typen arbeiten kann, können Sie InputArray
(oder OutputArray
) für die jeweiligen Parameter verwenden. Innerhalb einer Funktion sollten Sie die Methode _InputArray::getMat()
verwenden, um einen Matrix-Header für das Array zu erstellen (ohne Daten zu kopieren). _InputArray::kind()
kann verwendet werden, um Mat
von vector<>
usw. zu unterscheiden, aber normalerweise wird es nicht benötigt.
Also, wenn Sie benötigen Sie, dass Ihre Funktion sowohl InputArray
cv::Mat
und std::vector<>
Verwendung annehmen können, sonst einfach verwenden cv::Mat
.
Sicher nichtMat*
verwenden.
http://wklej.org/id/1768648/ Wird es funktionieren? – user3191398
Ja, verwenden Sie Const Mat & als Eingaben und Sie vermeiden, sogar die Kopfzeile von Mats zu kopieren. Sie können auch dst als Argument als Mat & setzen und void zurückgeben – Miki
Sehr detaillierte Antwort. –