如何在 MATLAB 中更改具有绿屏背景的图像的背景?
你有没有想过如何用这样的背景场景制作图形或 VFX 电影?实际上,所有 VFX 设计的电影都是使用绿屏制作的。我们将在本文中讨论相同的概念。具有完全绿色背景的图像称为绿色背景图像。这里正在考虑另一个相同大小的图像。我们将为具有绿色背景的图像添加背景。
绿屏或色度键摄影是一种摄影风格,我们在其中拍摄背景为纯色的照片,以便编辑人员可以轻松地将纯色背景替换为美丽的背景。对于每部涉及图形的电影,这种摄影都是强制性的。
不必只使用绿屏。对于屏幕的颜色,我们还有其他选项。我们可以为背景屏幕选择任何颜色,前提是背景颜色不应出现在前景主题图像的任何部分。
脚步:
- 阅读绿屏图像。
- 阅读我们有兴趣添加的背景图片。
- 循环遍历绿色图像,如果一个像素是完全绿色的,则表示它属于背景,需要更换。然后,
- 用背景图像中的相应像素信息替换该像素。
- 显示图像以说明该概念的工作原理。
使用的函数:
- imread( ) 内置函数用于读取图像。
- imtool( ) 内置函数用于显示图像。
- size( ) 内置函数用于获取图像的大小。
- rgb2gray( ) 内置函数用于将 RGB 图像转换为灰度图像。
- imresize( ) 内置函数用于调整原始图像的大小。
- length( ) 内置函数用于获取数组的长度。
Note: The size of the green screen image and background image must be equal in order to execute the code successfully in the desired manner.
If we use different sized images then the size of the final image will be equal to the size of the green screen image.
Both images should be RGB-colored images.
例子:
Matlab
% MATLAB Code FOR ADDING BACKGROUND %
function res=GreenScreen(Green_screen_img, Back_ground_img)
% size of both Image and BackGround
% images must be equal for this code.
[x,y,~]=size(Green_screen_img);
img=Green_screen_img;
bgimg=Back_ground_img;
% loop over the Green_screen_img.
for i=1:x
for j=1:y
if(img(i,j,2)>200 && (img(i,j,2)-img(i,j,1))>50
&& (img(i,j,2)-img(i,j,3))>50)
img(i,j,1)=bgimg(i,j,1);
img(i,j,2)=bgimg(i,j,2);
img(i,j,3)=bgimg(i,j,3);
end
end
end
% imtool(res,[]);
res=imresize(img,0.7);
end
% UTILITY Function %
function GreenScreen_Utility(Green_screen_img)
% Size of both Image and BackGround
% images must be equal for this code.
% backG=["backG.jpg","backG1.jpg",
%"backG2.jpg","backG3.jpg","backG4.jpg"];
backG=["backG.jpg","backG2.jpg","backG3.jpg"];
for i=1:length(backG)
backGround_img=imread(backG(i));
res=GreenScreen(Green_screen_img,backGround_img);
imtool(res,[]);
end
end
% UTILITY CODE%
k=imread("image.jpg");
GreenScreen_Utility(k);
输出:
(乙)
代码说明:
- 函数 res=GreenScreen(Green_screen_img, Back_ground_img) 这一行通过传递两个图像参数来定义函数。
- [x,y,~]=尺寸(Green_screen_img);此行返回绿屏图像的大小。
- res=imresize(img,0.7);此行将原始图像的大小调整为 70% 宽度。
- 函数 GreenScreen_Utility(Green_screen_img) 这一行定义了将执行实际工作的主函数。
- backG=[“backG.jpg”,”backG2.jpg”,”backG3.jpg”];此行定义背景图像列表。
- for i=1:length(backG) 这一行在上面定义的图像列表上运行循环。
- backGround_img=imread(backG(i));这一行从列表中一次读取一个图像。
- res=GreenScreen(Green_screen_img,backGround_img);此行通过传递 2 个图像参数调用 Main函数。
- imtool(res,[]);此行显示合并成功后的结果图像。
- GreenScreen_Utility(k);此行通过传递输入图像调用实用程序函数。