The non-local means algorithm is implemented in OpenCV by a family of functions: cv2.fastNlMeansDenoising, cv2.fastNlMeansDenoisingColored, cv2.fastNlMeansMulti, and cv2.fastNlMeansDenoisingColoredMulti. These functions take either one image or multiple images, gray-scale or color. In this recipe, we used the cv2.fastNlMeansDenoisingColored function, which takes a single BGR image and returns a denoised one. The function takes a few parameters, among them the parameter h, which stands for denoising strength; higher values leads to less noise, but a more smoothed image. The other parameters specify non-local means algorithms parameters such as template pattern size and search window space (named correspondingly).
The following image shows the expected results:
![](assets/03f2594d-20c7-42d6-8386-7282bf4a058c.png)