我在 matlab 中导入了一个图像,在显示它之前如何使图像的背景透明?例如,我在白色背景上有一个红球,如何使图像的白色像素透明,以便只有红球可见而白色像素是透明的?
问问题
12935 次
2 回答
15
您需要确保图像以“png”格式保存。然后您可以使用 png 文件的'Alpha' 参数,这是一个单独指定每个像素的透明度的矩阵。它本质上是一个布尔矩阵,如果像素是透明的则为 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);
于 2012-04-18T16:09:40.047 回答
12
注意 MATLAB 中的 for 循环应该不惜一切代价避免,因为它们很慢。重写代码以删除循环通常称为“矢量化”代码。在 ademing2 的答案的情况下,可以按如下方式完成:
A = zeros(size(X));
A(X == 255) = 1;
于 2013-09-27T16:17:28.727 回答