2 Stimmen

IplImage zu Mat 32-Bit-Konvertierungsfehler

Ich möchte ein IplImage in eine cv::Mat (nicht CvMat) umwandeln. Mit diesem Code scheinen die Werte überzulaufen...

IplImage mhi32f = cvCreateImage(cvSize(draw_rect.width,draw_rect.height), IPL_DEPTH_32F, 1);
cv::Mat mhi32_mat(mhi32f);
mhi32_mat.convertTo(mhi32_mat,CV_32FC1);

Irgendwelche Vorschläge?

2voto

mevatron Punkte 13671

Zunächst einmal sollte IplImage mhi32f = ... IplImage* mhi32f = ... sein, aber ich gehe davon aus, dass das ein Tippfehler von Ihrer Seite war.

Ihr Beispiel ist in Ordnung, außer dass Sie den convertTo Aufruf nicht benötigen. Wenn Sie die IplImage Daten in das Mat Objekt kopieren möchten, geben Sie einfach true als zweites Argument an den Konstruktor weiter, wie hier gezeigt.

Hier ist ein Beispiel, das zeigt, dass der Typ bereits CV_32FC1 ist:

#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
    IplImage* mhi32f = cvCreateImage(cvSize(320, 240), IPL_DEPTH_32F, 1);
    cv::Mat mhi32_mat(mhi32f);

    assert(mhi32_mat.type() == CV_32FC1);

    cout << "Bereits eine CV_32FC1 Matrix..." << endl;

    return 0;
}

Hoffe das hilft.

2voto

Sam Felix Punkte 1329

Wie hier erklärt, müssen Sie einfach das tun

Mat imgMat(iplimg);  // Konstruiere ein Mat-Bild "img" aus einem IplImage

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