2

作成したコードから取得した png 画像の白い背景を削除しようとしています。これは私が得る写真です: ここに画像の説明を入力

imfuse を使用して結合したい画像がいくつかあるため、白い背景を透明にしたいと考えています。

私がしていることはこれです(私の写真は「A1.png」と呼ばれています):

A1=imread('A1.png');
D=zeros(size(A1));
D(A1==255) =1;
imwrite(A1,'A11.png','alpha',D);

ただし、次のようなエラーが発生します Error using writepng>parseInputs (line 349) The value of 'alpha' is invalid. 実際のサイズは 829x600x3 ですが、入力のサイズは 829x600 であると予想されます。

829x600x3 uint8 は A1 のサイズです。x3 を取り除く必要があることは理解しています。しかし、それが写真を保存したときなのか、それともコードの早い段階なのかわかりません。

皆さんはどう思いますか?

4

3 に答える 3

2

D次元を 1 つ減らして作成するだけです。ここにコードがあります

D = zeros( size(A(:,:,1)) );
D( all( A==255, 3 ) ) = 1; 
imwrite(A,'A11.png','alpha',D);
于 2015-04-16T18:27:58.733 に答える
0

これが私がやった方法です。アルファ チャネルを持たない png があるため、上記のコードを使用して透明にするのに苦労しました。

最初にアルファチャンネルを追加してから、それを読み込んで上記のコードを使用することで、透明にすることができました。

[RGBarray,map,alpha] = imread('image1.png'); % if alpha channel is empty the next 2 lines add it

imwrite(RGBarray, 'image1_alpha.png', 'png', 'Alpha', ones(size(RGBarray,1),size(RGBarray,2)) )
[I,map,alpha] = imread('image1_alpha.png');

I2 = imcrop(I,[284.5 208.5 634 403]);
alpha = imcrop(alpha,[284.5 208.5 634 403]);

alpha( all( I2==255, 3 ) ) = 1; 
imwrite(I2,'image1_crop.png','alpha',alpha);
于 2017-01-05T04:25:50.480 に答える