これまでのところ、このコミュニティは私に質問をすることなく私を助けましたが、今日は答えを見つけることができなかったので、私は最初の質問をしなければなりません私はコミュニティの手伝いが切望されています。共有メモリから4バイトpP深度イメージを保存
私は画像を共有メモリに書き込むシミュレーションプログラムを使っています。メモリアドレスにアクセスして、画像を保存します。シミュレーションは2つの画像を送信しています.1つは通常の画像、もう1つは深さ情報です。開いている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 by 1ピクセルあたり1ピクセルの値は常に255です。この情報は私には役立ちませんが、おそらくあなたのことです。
私は画像処理について知っています。私は自分自身を考えていましたが、この時点で私は本当に何をすべきか分かりません。
どのタイプがimgですか? sizeof(RDB_IMAGE_t)の値は何ですか; – Micka
あなたはcvtColor行を削除し、画像を.pngとして保存してアップロードできますか? – Micka
タイトルは「4ビット深度」、テキストは「1ピクセルあたり4バイト」と言っています。また、腐敗が起きた時を見つけるために、各ステップの後に共有メモリを調べたりダンプしたりすることはできませんか? – VTT