I have the following image which is a scanned copy of an old book. I want to remove the noise in the background (which is a bit reddish) that is coming due to the scanning of the old photo.

[![enter image description here](https://i.stack.imgur.com/VIX99.jpg)](https://i.stack.imgur.com/VIX99.jpg)

**Update:**

After applying `opencv`, following the parameter settings in [opencv doc](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html), I am getting the following output.
[![enter image description here](https://i.stack.imgur.com/SZBoT.jpg)](https://i.stack.imgur.com/SZBoT.jpg)

Please help fixing this.

The code that I am using:

```
import numpy as np
import cv2
from matplotlib import pyplot as plt

def display_image_in_actual_size(im_data):

    dpi = 80
    height, width, depth = im_data.shape

    # What size does the figure need to be in inches to fit the image?
    figsize = width / float(dpi), height / float(dpi)

    # Create a figure of the right size with one axes that takes up the full figure
    fig = plt.figure(figsize=figsize)
    ax = fig.add_axes([0, 0, 1, 1])

    # Hide spines, ticks, etc.
    ax.axis('off')

    # Display the image.
    ax.imshow(im_data, cmap='gray')

    plt.show()

img = cv2.imread('scan03.jpg')

dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)

display_image_in_actual_size(img)
display_image_in_actual_size(dst)

```