필터 지우기
필터 지우기

How to change the black color into transparency in png format?

조회 수: 13 (최근 30일)
Mei Synn Tan
Mei Synn Tan 2017년 5월 9일
댓글: Walter Roberson 2021년 3월 12일
colorImage = imread('13100.png');
grayImage = rgb2gray(colorImage);
mserRegions = detectMSERFeatures(grayImage);
mserRegionsPixels = vertcat(cell2mat(mserRegions.PixelList));
mserMask = false(size(grayImage));
ind = sub2ind(size(mserMask), mserRegionsPixels(:,2), mserRegionsPixels(:,1));
mserMask(ind) = true;
f=figure();imshow(mserMask,'Border','tight');
maskedimage = immultiply(colorImage, repmat(mserMask, [1, 1, size(colorImage, 3)]));
imshow(maskedimage,'Border','tight');
TransparencyMaskedImage = maskedimage;
TransparencyMaskedImage(repmat(~mserMask, 1, 1, 3)) = ??;
imshow(TransparencyMaskedImage,'Border','tight');

채택된 답변

Walter Roberson
Walter Roberson 2017년 5월 9일
To just write it transparent with imwrite, you do not need any of the three lines
TransparencyMaskedImage = maskedimage;
TransparencyMaskedImage(repmat(~mserMask, 1, 1, 3)) = ??;
imshow(TransparencyMaskedImage,'Border','tight');
instead,
imwrite(maskedimage, 'YourFileName.png', 'Transparency', [0 0 0]);
If you want to display the image with transparency, then
mask = double( any(maskedimage, 3) );
image(maskedimage, 'AlphaData', mask ) %notice this is not imshow

추가 답변 (1개)

Muhammad Zeeshan Ahmed Khan
Muhammad Zeeshan Ahmed Khan 2021년 3월 12일
When you image() or imagesc() or imshow(), pass an option 'AlphaData' that is an array with the desired transparency, with 1 meaning to show the image completely and 0 meaning not showing the image at all (that is, show the background completely there.)
If the PNG had alpha information stored with it that you read with imread() then you should be able to use that transparency information directly.
[YourImage, ~, ImageAlpha] = imread('YourFile.png');
image(YourImage, 'AlphaData', ImageAlpha)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by