我有一個奇怪的問題使用OpenCV。假設我有一個CHAR類型的內存塊,它是一個sizeX * sizeY的8位深度圖像的緩衝區。的指針圖像稱爲pcMask,所以緩衝器保存到稱爲mask.dat使用以下代碼文件:OpenCV 1.1,IplImage無法正確顯示圖像
char fpath[256] = ".\mask.dat";
FILE *pFile = 0;
pFile = fopen(fpath,"wb");
if (pFile) {
fwrite(pcMask, sizeof(char), sizeX * sizeY, pFile);
fclose(pFile);
pFile = 0;
}
保存mask.dat後,我稱爲opencv的API來顯示該圖像作爲以下:
IplImage *mask = cvCreateImageHeader(cvSize(sizeY,sizeX), IPL_DEPTH_8U, 1);
mask->imageData = pcMask;
// display image
cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
cvShowImage("test", mask);
cvWaitKey(0);
cvDestroyWindow("test");
cvReleaseImageHeader(&mask);
我真的知道圖像應該是什麼樣子。爲了驗證,我編寫了一個python腳本來加載「mask.dat」文件,並使用matplotlib進行imshowed,並且它看起來很像this,但是,使用OpenCV顯示的圖像與this(不是顏色映射圖)很不相同。正如你所看到的,這兩個數字中的橢圓是完全不同的。當他們使用來自同一個內存塊的數據時,它們應該是相同的嗎?
非常感謝!
更新: 我覺得現在有一個bug在OpenCV1.1,「CUS我改變的IplImage CvMat中來,而現在一切是好的
CvMat *mask = cvCreateMatHeader(sizeY,sizeX, CV_8UC1);
mask->data.ptr = pcMask;
// display image
cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
cvShowImage("test", mask);
cvWaitKey(0);
cvDestroyWindow("test");
cvReleaseImageHeader(&mask);
OpenCV2.X可能不會有這樣的問題,但我只能用1.1來保持整個程序的一致性。無論如何,我現在使用CvMat作爲我的解決方案。
如果您遷移到OpenCV 2 API,您將可以節省數年的時間。我會認爲使用CvMat會導致更多的不一致性,而不是鏈接到較低版本的庫。但是跳過CvMat並使用cv :: Mat。 – Bull