Derzeit arbeite ich daran, die Disparität von Stereopaaren zu finden. Ich habe eine Situation bei der Erstellung von 20-Kanal-Datensatz, wenn ich deklarieren Array von 3 Dimension war es geben Fehler, stattdessen kann ich erstellen Bild von 20 Kanälen, so dass ich Daten speichern kann. Wenn ich kann, was sind die zusätzlichen Bedingungen, die ich einschließen müssen, um Ergebnisse ohne Fehler der Speicherzuweisung oder eine Art von .... zu erhalten. Das Erstellen eines Bildes mit 20 Kanälen wird für mich sogar bequem sein...
Antworten
Zu viele Anzeigen?Die C++-Schnittstelle von OpenCV bietet cv::Mat
, das das Programm IplImage
Typ der C-Schnittstelle. Dieser neue Typ bietet mehrere Konstruktoren, darunter das unten stehende mit dem die gewünschte Anzahl von Kanälen über den Parameter type
:
Mat::Mat(int rows, int cols, int type)
Beispiel-Code:
#include <cv.h>
#include <highgui.h>
#include <iostream>
void test_mat(cv::Mat mat)
{
std::cout << "Channels: " << mat.channels() << std::endl;
}
int main(int argc, char* argv[])
{
cv::Mat mat20(1024, 768, CV_8UC(20));
test_mat(mat20);
return 0;
}
Opencv implementiert eine Vorlagenklasse für kleine Matrizen, deren Typ und Größe zum Zeitpunkt der Kompilierung bekannt sind:
template<typename _Tp, int m, int n> class Matx {...};
Sie können eine spezifizierte Vorlage für einen Teilfall von Matx erstellen, nämlich cv::Vec, wie sie bereits in opencv für 1, 2 oder 3 solche "Kanäle" geschrieben wurden:
typedef Vec<uchar, 3> Vec3b; // 3 channel -- written in opencv
typedef Vec<uchar, 20> Vec20b; // the one you need
Und dann deklarieren Sie eine Matrix Ihres neuen (20 Kanal von uchar) Objekts:
cv::Mat_<Vec20b> myMat;
myMat.at<Vec20b>(i,j)(10) = .. // access to the 10 channel of pixel (i,j)