これに imwrite を使用して double 型の行列を image.iam に変換する際に問題がありますが、毎回エラーは入力引数が多すぎます。行列の値は 0 ~ 255 ですが、型は double です。imread を使用して画像を開き、バイナリに変換してから、コマンド double を使用して画像に変換しようとしました。私のfypでバイナリ形式が必要で、それを画像に変換します。どのように可能ですか?誰かが解決策を持っている場合は、親切に助けてください。ありがとう!
質問する
26836 次
3 に答える
1
次のコードを使用します。
I = imread('test.jpg');
b = dec2bin(I); % b becomes vector
% some actions with binary vector
du = bin2dec(b);
du = reshape(du,size(I)); % converting vector du to 3d Image array
imwrite(uint8(du), 'du.jpg'); %save our du to file du.jpg
I = imread('du.jpg'); %test if it saved correctly
imshow(du)
于 2012-05-19T14:21:44.273 に答える
0
Java を使用して matlab 関数を呼び出す場合 (Java は入力画像としてバイト配列を送信します)、まず行列を符号なし 8 ビット整数に変換します。
m1 = typecast(arr, 'uint8');
入力を符号なし整数として設定した後、それらのピクセル値を範囲 (0, 255) の RGB として使用できます。conv2 のようなフィルターを使用する場合は、符号なし配列を画像の倍精度に変換する必要があります。それはそうすることができます:
m2 = im2double(m1);
畳み込みを適用すると、倍精度 (0 ~ 1 の間) として出力が生成されます。その後、符号なしの値を取得したい場合は、それを使用する必要があります。
m3 = im2uint8(m2);
特に Java から matlab を呼び出す場合、入力配列を uint8 に型キャストすることは非常に重要です。これは、matlab が最初に Java バイト配列を signed int として受け取るためです。それを解決するのは非常に苦痛だったので、その変換ステップを追跡すると役立つかもしれません!
于 2014-08-29T12:07:59.200 に答える