4 Stimmen

Können wir ein Bild mit n Kanälen in opencv erstellen, n wird etwa 20 sein

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...

14voto

karlphillip Punkte 89618

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;
}

3voto

Eric Punkte 2271

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)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X