I am trying to find the best Sentinel-2 cloud mask algorithm for Level-2A data that can be integrated in a Python script and that works well on oceanic areas. I am working with level-2 data because I want the "default" BOA reflectances without the need to atmospheric correct a level-1C product.

I found the FMask algorithm, but it only works with level-1 data. The SCL mask (Sen2Cor) provided on the level-2 product doesn't have the best classification in some cases. sen2cloudless only works with level-1 data.

KappaMask seems to provide good results and works with level-2 data but the installation and setup is difficult for me because of the large number of dependencies.

Do you know other Sentinel-2 cloud mask algorithms that can be applied to Level-2 data and that can be easily integrated in Python?

My last option is to use a level-1 product to apply FMask and extract the cloud mask and a level-2 product to use as main file during my entire process, since I don't want to apply my own atmospheric correction, but use the default values provided by level-2 ESA product.

Attached to this question is an image comparing SCL with FMask, the second one with better results over the ocean.

enter image description here

  • 1
    This algorithm that you refer, also known as s2cloudless only works with level-1 data. Thank you for sharing, but I need one that works with level-2. Feb 3, 2022 at 10:36

1 Answer 1


Have you thought about using the Cloud Probability dataset available on GEE? This comes from the s2cloudless package. To use the library directly you would need L1C images but you can use Google Earth Engine to extract the images so you can then use them locally. You can check this question that could be useful for your problem. You can extract the image using geemap which is quite fast.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.