📜  如何在 MATLAB 中更改具有绿屏背景的图像的背景?

📅  最后修改于: 2022-05-13 01:55:37.103000             🧑  作者: Mango

如何在 MATLAB 中更改具有绿屏背景的图像的背景?

你有没有想过如何用这样的背景场景制作图形或 VFX 电影?实际上,所有 VFX 设计的电影都是使用绿屏制作的。我们将在本文中讨论相同的概念。具有完全绿色背景的图像称为绿色背景图像。这里正在考虑另一个相同大小的图像。我们将为具有绿色背景的图像添加背景。

绿屏或色度键摄影是一种摄影风格,我们在其中拍摄背景为纯色的照片,以便编辑人员可以轻松地将纯色背景替换为美丽的背景。对于每部涉及图形的电影,这种摄影都是强制性的。

不必只使用绿屏。对于屏幕的颜色,我们还有其他选项。我们可以为背景屏幕选择任何颜色,前提是背景颜色不应出现在前景主题图像的任何部分。

脚步:

  • 阅读绿屏图像。
  • 阅读我们有兴趣添加的背景图片。
  • 循环遍历绿色图像,如果一个像素是完全绿色的,则表示它属于背景,需要更换。然后,
  • 用背景图像中的相应像素信息替换该像素。
  • 显示图像以说明该概念的工作原理。

使用的函数:

  • imread( ) 内置函数用于读取图像。
  • imtool( ) 内置函数用于显示图像。
  • size( ) 内置函数用于获取图像的大小。
  • rgb2gray( ) 内置函数用于将 RGB 图像转换为灰度图像。
  • imresize( ) 内置函数用于调整原始图像的大小。
  • length( ) 内置函数用于获取数组的长度。

例子:

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);


输出:

图 1:原始绿屏图像

图 2:背景

图 3:输出

图 4:原始绿屏图像

(乙)

图 5:背景

图 6:输出

代码说明:

  • 函数 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);此行通过传递输入图像调用实用程序函数。