Konvertieren Sie Bitmap-Matte
Muss ich konvertieren Gdiplus::Bitmap-cv::Map-format.
Ich bin mit diesem code, um dies zu tun:
Gdiplus::Bitmap* enhanced = ...; //some Bitmap
Gdiplus::BitmapData bmp_data = {};
Gdiplus::Rect rect(0, 0, enhanced->GetWidth(), enhanced->GetHeight());
enhanced->LockBits(&rect, Gdiplus::ImageLockModeRead, enhanced->GetPixelFormat(), &bmp_data);
Mat imageMap(enhanced->GetHeight(), enhanced->GetWidth(), CV_8UC3, bmp_data.Scan0, std::abs(bmp_data.Stride)); //construct Map from Bitmap data. The problem is probably here
cvNamedWindow("w", 1);
cvShowImage("w", &imageMap); //runtime error (access violation)
cvWaitKey(0);
Habe ich einen runtime error, wie imageMap war nicht richtig ausgebildet ist. Was mache ich hier falsch? Ich werde dankbar für Ihre Erklärung.
- pleaase vermeiden, die alten c-api-Funktionen verwenden:
cv::imshow("w", imageMap)
statt - was ist das pixel-format zurückgegeben von
GetPixelFormat
? - zu @berak: Es war das problem! bitte, stellen Sie es auf eine Antwort. Ich werde es akzeptieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie konstruieren eine cv::Mat aus der Bitmap, müssen Sie
um es zu zeichnen.
wieder die Adresse ein cv::Mat ist nicht das gleiche wie ein IplImage* erforderlich cvShowImage();
(btw, Sie sollten loszuwerden, alle anderen veralteten c-api-Aufrufe, zu.)
auch ein wenig vorsichtig sein, eine Matte aufgebaut, wie Sie tun, hat eine ausgeliehen Zeiger auf die Pixel.
ich weiß nicht, etwas über gdi+, aber wenn die Zeiger außerhalb des Gültigkeitsbereichs oder ungültig wird, wenn Sie anrufen, erweitert->UnlockRect (oder wie es genannt wurde), das Sie tun müssen,
zu erreichen, eine "Tiefe" Kopie.