# Virtual Background (/en/realtime-media/broadcast-streaming/build/apply-effects-and-enhancements/virtual-background/windows)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

Virtual Background enables users to blur their background, or replace it with a solid color or an image. This feature is applicable to use-cases such as online conferences, online classes, and live streaming. It helps protect personal privacy and reduces audience distraction.

      
  
      
  
      
  
      
    ## Understand the tech [#understand-the-tech-3]

    Virtual Background offers the following options:

    | Feature                                 | Example                                                                                                                                                                                                                                                                                                               |
    | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Blurred background and image background | ![image](https://assets-docs.agora.io/images/extensions-marketplace/blurred-background.jpg)                                                                                                                                                                                                                           |
    | Video/Animated background               | <video src="https://assets-docs.agora.io/images/extensions-marketplace/virtual-background.mp4" poster="https://web-cdn.agora.io/docs-files/1654571689670" width="100%" height="auto">Your browser does not support the `video` element.</video>                                                                       |
    | Portrait-in-picture                     | ![portrait-in-picture](https://assets-docs.agora.io/images/extensions-marketplace/portrait-in-picture.jpg) Allows the presenter to use slides as the virtual background while superimposing their video. The effect is similar to a weather news cast on television, preventing interruptions during a layout toggle. |

    Want to test Virtual Background? Try the <a href="https://webdemo.agora.io/virtualBackground/index.html">online demo</a>.

    ## Prerequisites [#prerequisites-3]

    Ensure that you have implemented the [SDK quickstart](../../index) in your project.

    ## Implement virtual background [#implement-virtual-background-3]

    This section shows you how to add a virtual background to the local video.

    ### Check device compatibility [#check-device-compatibility-2]

    To avoid performance degradation or unavailable features when enabling Virtual Background on low-end devices, check whether the device supports the feature.

    ```cpp
    if (!(m_rtcEngine->isFeatureAvailableOnDevice(FeatureType::VIDEO_VIRTUAL_BACKGROUND)))
    {
      AfxMessageBox(L"Device doesn't support virtual background");
      return;
    }
    ```

    ### Set a blurred background [#set-a-blurred-background-2]

    To blur the video background, use the following code:

    ```cpp
    void SetBackgroundBlur(VirtualBackgroundSource& virtualBackgroundSource) {

      VirtualBackgroundSource virtualBackgroundSource;
      SegmentationProperty segmentationProperty;

      // Set background blur
      virtualBackgroundSource.background_source_type = VirtualBackgroundSource:BACKGROUND_BLUR;
      virtualBackgroundSource.blur_degree = VirtualBackgroundSource::BLUR_DEGREE_HIGH;

      // Set processing properties for background
      segmentationProperty.modelType = SegmentationProperty::SEG_MODEL_AI;

      segmentationProperty.greenCapacity = 0.5F;
      // Enable or disable virtual background
      m_rtcEngine->enableVirtualBackground(true, virtualBackgroundSource, segmentationProperty);
    }
    ```

    ### Set a color background [#set-a-color-background-2]

    To apply a solid color as the virtual background, use a hexadecimal color code. For example, `0x0000FF` for blue:

    ```cpp
    void SetBackgroundColor(VirtualBackgroundSource& virtualBackgroundSource) {

      VirtualBackgroundSource virtualBackgroundSource;
      SegmentationProperty segmentationProperty;

      // Set a solid background color
      virtualBackgroundSource.background_source_type = VirtualBackgroundSource::BACKGROUND_COLOR;
      virtualBackgroundSource.color = 0x0000FF;

      // Set processing properties for background
      segmentationProperty.modelType = SegmentationProperty::SEG_MODEL_AI;

      segmentationProperty.greenCapacity = 0.5F;
      // Enable or disable virtual background
      m_rtcEngine->enableVirtualBackground(true, virtualBackgroundSource, segmentationProperty);
    }
    ```

    ### Set an image background [#set-an-image-background-2]

    To set a custom image as the virtual background, specify the absolute path to the image file.

    ```cpp
    void SetBackgroundImage(VirtualBackgroundSource& virtualBackgroundSource) {

      VirtualBackgroundSource virtualBackgroundSource;
      SegmentationProperty segmentationProperty;

      // Set a background image
      virtualBackgroundSource.background_source_type = VirtualBackgroundSource::BACKGROUND_IMG;
      virtualBackgroundSource.source = "<absolute path to an image file>";

      // Set processing properties for background
      segmentationProperty.modelType = SegmentationProperty::SEG_MODEL_AI;

      segmentationProperty.greenCapacity = 0.5F;
      // Enable or disable virtual background
      m_rtcEngine->enableVirtualBackground(true, virtualBackgroundSource, segmentationProperty);
    }
    ```

    ### Reset the background [#reset-the-background-2]

    To disable the virtual background and revert to the original video state, use the following code:

    ```cpp
    void ResetVirtualBackground() {
      // Set a default or reset state for the virtual background
      VirtualBackgroundSource virtualBackgroundSource;
      SegmentationProperty segmentationProperty;

      // For example, setting a default background color
      virtualBackgroundSource.background_source_type = VirtualBackgroundSource::BACKGROUND_COLOR;
      virtualBackgroundSource.color = 0xFFFFFF;

      // Set processing properties for background
      segmentationProperty.modelType = SegmentationProperty::SEG_MODEL_AI;
      segmentationProperty.greenCapacity = 0.5F;

      // Disable virtual background
      m_rtcEngine->enableVirtualBackground(false, virtualBackgroundSource, segmentationProperty);
    }
    ```

    ## Reference [#reference-3]

    This section contains content that completes the information in this page, or points you to documentation that explains other aspects to this product.

    ### API reference [#api-reference-3]

    * [`isFeatureAvailableOnDevice`](https://api-ref.agora.io/en/video-sdk/cpp/4.x/API/class_irtcengine.html#api_irtcengine_isfeatureavailableondevice)

    * [`enableVirtualBackground`](https://api-ref.agora.io/en/video-sdk/cpp/4.x/API/class_irtcengine.html#api_irtcengine_enablevirtualbackground)

    * [`VirtualBackgroundSource`](https://api-ref.agora.io/en/video-sdk/cpp/4.x/API/class_virtualbackgroundsource.html)

    * [`SegmentationProperty`](https://api-ref.agora.io/en/video-sdk/cpp/4.x/API/class_segmentationproperty.html)

    
  
      
  
      
  
      
  
      
  
      
  
      
  
      
  
