0

これに imwrite を使用して double 型の行列を image.iam に変換する際に問題がありますが、毎回エラーは入力引数が多すぎます。行列の値は 0 ~ 255 ですが、型は double です。imread を使用して画像を開き、バイナリに変換してから、コマンド double を使用して画像に変換しようとしました。私のfypでバイナリ形式が必要で、それを画像に変換します。どのように可能ですか?誰かが解決策を持っている場合は、親切に助けてください。ありがとう!

4

3 に答える 3

2

を使用して、値im2doubleから値に変換できます。逆の場合は、を使用できます。uint8doubleim2uint8

于 2012-05-16T11:45:19.510 に答える
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 に答える