到目前爲止,每當我有一個問題時,這個社區幫助我,而不必問我一個問題,但今天我不得不問我的第一個問題,因爲我找不到答案我非常渴望社區的幫助。從共享內存中保存4字節的pP深度圖像
我正在使用將圖像寫入共享內存的模擬程序。訪問內存地址,我想保存圖像。模擬發送兩個圖像,一個是正常的,一個是深度信息。用普通的cv保存正常的圖像是沒有問題的。
讀取和保存的正常圖像作爲完成如下:
//find image in Memory
uchar *imageMem = (uchar*)img + sizeof(RDB_IMAGE_t);
//set heights and width to image parameters
int w = img->width;
int h = img->height;
//create matrix for image
Mat image(h,w,CV_8UC3,imageMem);
//image is upside-down in memory, so it has to be flipped
Mat flipped;
flip(image,flipped,0);
//change color from bgr to rgb
Mat recolored;
cvtColor(flipped, recolored, COLOR_BGR2RGB);
string folderName = "normal";
string name = "normal_";
string type = ".png";
ss << folderName << "/" << name << simFrame << type;
string filename = ss.str();
ss.str("");
imwrite(filename, recolored);
我們的實際問題。模擬將深度信息保存在不同的共享內存地址下,但始終保存在img中。根據圖像的索引,指針img指向相應內存地址的正常或深度。普通圖像的地址是0x0811a,深度圖像是0x0811b。保存深度圖像的代碼如下:
uchar *imageMem = (uchar*)img + sizeof(RDB_IMAGE_t);
int w = img->width;
int h = img->height;
Mat image_d(h,w,CV_8UC4,imageMem);
Mat flipped;
flip(image_d,flipped,0);
Mat recolored;
cvtColor(flipped, recolored, CV_BGRA2GRAY, 1);
string folderName = "Depth";
string name = "Depth_";
string type = ".png";
ss << folderName << "/" << name << simFrame << type;
string filename = ss.str();
ss.str("");
imwrite(filename, recolored);
保存深度信息後的結果是這樣的:
但它應該是這樣的:
模擬開發人員表示深度圖像以4爲單位發送到共享內存te每像素圖像和一個像素總是有價值255.這些信息不幫助我,但也許你。
我對圖像處理的所有知識我認爲我的自我,在這一點上,我真的不知道該怎麼做。
什麼類型是img? sizeof(RDB_IMAGE_t)的值是什麼;? – Micka
您可以刪除cvtColor行並將圖像保存爲.png並上傳它嗎? – Micka
標題說「4位深度」,文字說「每個像素4字節」,那麼它是哪一個?你也不能只是檢查共享內存或在每一步後轉儲它以找出腐敗發生的時間? – VTT