BMPをネットからIplImageに読み込み
インターネット上のBMPファイルをIplImageに読み込んで表示させてみたい。
#pragma comment(lib,"cv.lib") #pragma comment(lib,"cxcore.lib") #pragma comment(lib,"highgui.lib") #include <cv.h> #include <highgui.h> #include <iostream> #using <System.dll> using namespace std; using namespace System; using namespace System::IO; using namespace System::Net; IplImage* GetIplImage() { IplImage *img = 0; //width,heightは決め打ち img = cvCreateImage(cvSize(512, 512), IPL_DEPTH_8U, 3); int byte = 0; int count = 0; String^ url = "http://ninoseki.ps.land.to/Mandrill.bmp"; HttpWebRequest^ request = (HttpWebRequest^)(WebRequest::Create(url)); HttpWebResponse^ response = (HttpWebResponse^)(request->GetResponse()); Stream^ receiveStream = response->GetResponseStream(); while (byte != -1){ byte = receiveStream->ReadByte(); if (byte == -1){ cout << "end" << endl; }else{ img->imageData[count] = (unsigned char)byte; } count ++; } cout << count << endl; response->Close(); receiveStream->Close(); return img; } int main() { IplImage *img = 0; img = GetIplImage(); //cvFlip(img, img); cvNamedWindow("test", CV_WINDOW_AUTOSIZE); cvShowImage("test", img); cvWaitKey(0); cvSaveImage("test.jpg", img); cvDestroyWindow("test"); cvReleaseImage(&img); return 0; }
・実行結果
うーん。上下反転しているのはいいとしても、18画素ずれてるのはよろしくない。
なんでこうなるんだろうか。
OpenCVもBitmapもBGR順だからそこで間違いはない。
Bitmapのデータ構造をそのままIplImageのimageDataに突っ込んでるのがいけないのかな?
だれか教えてください。