在Matlab中使像素透明

时间:2012-04-18 15:59:30

标签: matlab matlab-figure matlab-guide

我在matlab中导入了一个图像,在显示之前我如何使图像的背景透明?例如,我在白色背景上有一个红色的球,我如何使图像的白色像素透明,以便只有红色球可见,白色像素是透明的?

2 个答案:

答案 0 :(得分:15)

您需要确保图像以“png”格式保存。然后你可以使用png文件的'Alpha' parameter,这是一个矩阵,可以单独指定每个像素的透明度。它本质上是一个布尔矩阵,如果像素是透明的,则为1,否则为0。只要您想要透明的颜色始终是相同的值(即uint8为255),就可以使用for循环轻松完成此操作。如果它不总是相同的值,那么您可以定义一个阈值或值范围,其中该像素将是透明的。

更新:

首先通过迭代图像生成alpha矩阵,并且(假设您将白色设置为透明)每当像素为白色时,将该像素处的alpha矩阵设置为1。

# X is your image
[M,N] = size(X);
# Assign A as zero
A = zeros(M,N);
# Iterate through X, to assign A
for i=1:M
   for j=1:N
      if(X(i,j) == 255)   # Assuming uint8, 255 would be white
         A(i,j) = 1;      # Assign 1 to transparent color(white)
      end
   end
end

然后使用这个新创建的alpha矩阵(A)将图像保存为“.png”

imwrite(X,'your_image.png','Alpha',A);

答案 1 :(得分:11)

应该不惜一切代价避免使用MATLAB中的循环,因为它们很慢。重写代码以删除循环通常称为“矢量化”代码。在ademing2的答案中,可以按如下方式进行:

A = zeros(size(X));
A(X == 255) = 1;