Ist "InputArray" und "Mat" - das gleiche in opencv?
In der Dokumentation zum Beispiel gibt es:
void cv::absdiff ( InputArray src1,
InputArray src2,
OutputArray dst
)
Ist das das gleiche wie:
void cv::absdiff ( Mat src1,
Mat src2,
Mat dst
)
oder:
void cv::absdiff ( Mat* src1,
Mat* src2,
Mat* dst
)
?
Ich benötige diese zum erstellen neuer Funktion, zum Beispiel
void absDiffSay(XXX src1, XXX src2, XXX dst)
{
cv::absdiff(src1,src2,dst);
cout<<"absdiff"<<endl;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom OpenCV-doc
Dies ist der proxy-Klasse für die übergabe von nur-lese-Eingabe-arrays in OpenCV-Funktionen.
Es ist definiert als:
wo
_InputArray
ist eine Klasse, die erstellt werden können, ausMat
,Mat_<T>
,Matx<T, m, n>
,std::vector<T>
,std::vector<std::vector<T> >
oderstd::vector<Mat>
. Es können auch konstruiert werden, die aus einer matrix Ausdruck.Da diese meistens Umsetzung-level-Klasse, deren Schnittstelle in zukünftigen Versionen ändern kann, wissen wir nicht im Detail beschrieben. Es gibt ein paar wichtige Dinge, aber, dass sollte im Auge behalten werden:
Wenn Sie finden Sie in der Bedienungsanleitung oder im OpenCV source code eine Funktion, die nimmt
InputArray
es bedeutet, dass Sie tatsächlich passMat
,Matx
,vector<T>
etc. (siehe oben die Liste).Optionale input-Argumente: Wenn einige der Eingabe-arrays kann auch leer sein, pass
cv::noArray()
(oder einfachcv::Mat()
als du wahrscheinlich vor hast).Die Klasse ist ausschließlich für die übergabe von Parametern. Das heißt, Sie sollten in der Regel nicht erklären, Schüler, lokale und Globale Variablen von diesem Typ.
Wenn Sie möchten, entwerfen Sie Ihre eigene Funktion oder Methode einer Klasse, die arbeiten können, von arrays, die von mehreren Arten, die Sie verwenden können
InputArray
(oderOutputArray
) für den jeweiligen Parameter. Innerhalb einer Funktion, die Sie verwenden sollten_InputArray::getMat()
Methode zum konstruieren einer matrix-header für das array (ohne die Daten zu kopieren)._InputArray::kind()
kann verwendet werden, zu unterscheidenMat
ausvector<>
etc., aber es ist normalerweise nicht erforderlich.Also, wenn Sie Sie brauchen, die Ihre Funktion akzeptieren kann sowohl
cv::Mat
undstd::vector<>
verwendenInputArray
verwenden, ansonsten einfachcv::Mat
.Sicher, nicht verwenden
Mat*
.