Maybe something like this:
img = Import["https://i.sstatic.net/0Jl54.png"]
text = TextRecognize @ img
del = {"the worst", "of times"};
Rasterize[#, RasterSize -> 1000, ImageSize -> ImageDimensions @ img]& @
Style[#, FontFamily -> "Times"]& @
StringReplace[
text, {del[[1]] -> StringPadRight["", StringLength @ del[[1]]],
del[[2]] -> StringPadRight["", StringLength @ del[[2]]]}]

PLEASE NOTE
There is a reason why watermarks are there in the first place - to prevent unauthorised reuse of images. For more information on the issues around removing watermarks from images, this Wikimedia article is just one of many useful resources.
The answer below is intended as an exercise in automatically removing text from an image using the inpainting technique. The first part of this answer assumes an unknown text overlay using binarization. The second part of the answer attempts to deal with a known overlay image but unknown position, using image correlation.
Part 1 - Unknown overlay text, unknown position
For scenarios where the text is a given colour that differs a lot from the rest of the image, this is a job for ChanVeseBinarize[]. It even works fairly well with translucent text - here's an example with a bit of translucent white text, using a Mathematica test image:
image = Import["https://i.sstatic.net/LyJTe.png"]
(* This is where parameters become important *)
binimg = ChanVeseBinarize[image, White, {Automatic, 0.12}, MaxIterations -> 1000];
(* Now we can create the mask *)
maskimg = Dilation[DeleteSmallComponents[binimg, 4], 2.5];
And finally the inpainting, making use of the method options to improve the result. It introduces a few artifacts due to an imperfect mask (for example, look at the red edge of the nose), but it's not bad given the text was translucent to start off with. With fully-white text, it's much better.
Inpaint[image, maskimg, Method -> {"TextureSynthesis", "MaxSamples" -> 1200}, MaxIterations -> 500]

Part 2 - Known overlay text, unknown position
This deals with a known piece of overlay text, and makes use of ImageCorrelate[]. Here I make no change to the size or orientation of the overlay, but if you look in the documentation of ImageCorrelate[] under "Generalizations and Extensions" you'll see an example of finding rotated occurrences of a template.
(* The test image is ExampleData[{"TestImage", "Mandrill"}] *)
overlay = Graphics@Text[Style["I love stackexchange", FontFamily -> "Arial",
FontSize -> 32, Bold, White, Opacity[0.8]]];
(* Or you can just import an image I've already prepared *)
compositeimage = Import["https://i.sstatic.net/DJEWm.png"]
Then we use ImageCorrelate[] to find the most likely position for the text in the image, and MaxDetect to extract its position (the white dot).
corrimage = ImageAdjust@ImageCorrelate[compositeimage, Binarize@overlay];
maxdetect = MaxDetect[ImageAdjust@DistanceTransform@Binarize[corrimage, 0.9]];
maxpos = Flatten@PixelValuePositions[maxdetect, 1];
(* This combines the overlay into a mask at the correct position *)
blankimage = Image@ConstantArray[0, ImageDimensions@compositeimage];
maskimage = ImageCompose[blankimage, Binarize@overlay, maxpos];
(* Dilation important to ensure full coverage of the mask *)
maskimage = Dilation[maskimage, 2];
Finally we can construct a mask from this information and inpaint. Here the performance is much better than above, because the mask is better.
Inpaint[compositeimage, maskimage,
Method -> {"TextureSynthesis", "MaxSamples" -> 1200},
MaxIterations -> 500]

Here's an alternative approach that uses the functionality of ImageAlign[] to remove the watermark.
pic = ExampleData[{"TestImage", "Lena"}];
watertext =
Image@Graphics@
Text[Style["Welcome to China", Blue, 30, FontFamily -> "Arial"]]

waterimage =
Show[pic,
Graphics@
Text[Style["Welcome to China", Blue, 30,
FontFamily -> "Arial"], {130, 400}]] // Image

ali = ImageAlign[waterimage, watertext,
TransformationClass -> "Perspective"];
ImageCompose[ali, {waterimage, 0.4}]

mask = ali // ChanVeseBinarize[#, Blue] & // Dilation[#, 3] &;
Inpaint[waterimage, mask, Method -> "TextureSynthesis"]

Erase parts of image or overlay with different color - Mathematica Stack Exchange
Mathematical morphology: removing text features from image, while keeping connectivity - Mathematica Stack Exchange
Remove object from the image - Mathematica Stack Exchange
image processing - Identifying and removing features from scanned handwriten text - Mathematica Stack Exchange
This is a fast and quite good way to create the mask of the spider:
i = Import["http://i.stack.imgur.com/2Lz0A.jpg"];
mask = Dilation[
DeleteSmallComponents@ ColorNegate@ DeleteSmallComponents@
MorphologicalBinarize[i, .25],
DiskMatrix[2]]

Then, you can use Inpaint with the generated mask:
Inpaint[i, mask]

You will have to adjust the MorphologicalBinarize threshold value to achieve good results for other images.
You should first generate the mask, then you can apply Inpaint. Following is a demo, it can be further enhanced.
flt = ColorNegate@MorphologicalBinarize[img, {0.4, 0.9}];
Inpaint[img, flt];

Almost!
Convert your image to binary image
img = Import["https://i.sstatic.net/uRUEw.jpg"];
binimg = ColorNegate@Binarize[img, .75]
Get tha mask used in Inpaint
mask = SelectComponents[binimg, {"PerimeterLength", "Elongation"},
60 < # < 160 || #2 > 0.8 &]
Contrasting your image with after.
Grid[{{"Before", Magnify[img, 5]}, {"After",Magnify[Inpaint[img, Dilation[mask, 1],
Method -> "TextureSynthesis"], 5]}}]
Hey, go to upvote @yode's answer! He's brilliant!
Result first, I hope that would be good enough:

The idea is quite simple------Find those feature and try to delete them.
How to use the code?
- Manually select the features you would like to delete, binarize it properly and put it in
ker. For example, at this place you could use something like this:

- If you want a better result, create another mask and roughly single out all the words. Create a mask like this and put it in
msk1:

- run the code and get the result.
Code
Inpaint[imgo,
Binarize[ColorSeparate[
HighlightImage[
imgo, {Red, Opacity@1,
Disk[#, 20] & /@
ImageCorners@
Binarize[
ImageCorrelate[
ImageMultiply[ColorNegate@Binarize@imgo, ColorNegate@msk1],
ker, Mean@Abs@Flatten[#1 - #2] &], .2]}], "R"], .95]]
How it works
Firstly and most importantly, it will do a
ImageCorrelateand find the points with good fit to ker.Then it will find out those points in need of delete process by using
ImageCornersFinally, we can use
Inpaintto get a desired result.
Places that can be further improved
The sign MUST BE almost EXACTLY the same. longer or shorter will influence the detection process and some extra mark in detection area will also interfere with result. Also, sometimes it will mis-detect the down part of "o" if you don't make the mask carefully.
Speed is quite slow......
Hope this can help you~
Edit 1
This edit's main(maybe I should not say "main", it totally is!) contributor is @yode. Without his help, this code will still need a stupid mask.......
Now this answer can correct the image at higher accuracy and have higher detection rate.
The result is like this~

This code requires only imgo and ker:
Inpaint[imgo,
Binarize[ColorSeparate[
HighlightImage[
imgo, {Red, Opacity@1,
Disk[#, 20] & /@
ImageCorners@
Binarize[
ImageCorrelate[
SelectComponents[ColorNegate@Binarize@imgo,
"PerimeterLength", 40 < # < 200 &], ker,
Mean@Abs@Flatten[#1 - #2] &], .2]}], "R"], .95]]
BTW: @yode is on his way to post a much more elegant, faster and wider appliable answer.
For this one example, a start might be to extract the different colour layers.
masks = (ColorReplace[#, {Red -> Black, _ -> White}, .2] &) /@ (ImageRecolor[
i, {# -> Red}] & /@ Rest[DominantColors[i]])
This gives us back two images:

and then we can use these as masks on the original image:
ImageAdd[#, i] & /@ masks

It may be possible to use ImageBoundingBoxes or (more likely) another neural network based approach to separate the text and the boat - ImageBoundingBoxes is apparently not trained on pictures of text.
(The "test text" example makes me think this is one of hundreds of images, and it seems unlikely that you will find a blanket solution for this class of problem that doesn't require a fair bit of hand-tweaking per image.)
Let's use the color scheme:
colors = DominantColors[img];
detects = ColorDetect[img, #] & /@ Rest[colors];
Binarize /@ detects

I just want it to be white where it is orange. And what is colorfunction working on if not the surface that is shaded? PlotStyle->None make the surface transparent, not what I want. The hidden lines should remain hidden, but by white, not shades of orange.
Thanks very much
This function implements the reverse blend described by Mark Ransom, for an additional small but visible improvement:
reverseBlend[img_Image, alpha_Image, bgcolor_] :=
With[
{c = ImageData[img],
a = ImageData[alpha] + 0.0001, (* this is to minimize ComplexInfinitys and considerably improve performance *)
bc = bgcolor},
ImageClip@
Image[Quiet[(c - bc (1 - a))/a, {Power::infy,
Infinity::indet}] /. {ComplexInfinity -> 0, Indeterminate -> 0}]
]
This is the background removal function. The threshold parameter is used for the initial binarization of the image, the minSizeCorrection is for tweaking the size limit of small junk components to be removed after binarization.
removeWhiteBackground[img_, threshold_: 0.05, minSizeCorrection_: 1] :=
Module[
{dim, bigmask, mask, edgemask, alpha},
dim = ImageDimensions[img];
bigmask =
DeleteSmallComponents[
ColorNegate@
MorphologicalBinarize[ColorNegate@ImageResize[img, 4 dim], threshold],
Round[minSizeCorrection Times @@ dim/5]];
mask = ColorNegate@
ImageResize[ColorConvert[bigmask, "GrayScale"], dim];
edgemask =
ImageResize[
ImageAdjust@DistanceTransform@Dilation[EdgeDetect[bigmask, 2], 6],
dim];
alpha =
ImageAdd[
ImageSubtract[
ImageMultiply[ColorNegate@ColorConvert[img, "GrayScale"],
edgemask], ImageMultiply[mask, edgemask]], mask];
SetAlphaChannel[reverseBlend[img, alpha, 1], alpha]
]
Testing the function:
img = Import["https://i.sstatic.net/k7E1F.png"];
background =
ImageCrop[
Import["http://cdn.zmescience.com/wp-content/uploads/2011/06/\
forest2.jpg"], ImageDimensions[img]];
result = removeWhiteBackground[img]
ImageCompose[background, result]
Rasterize[result, Background -> Red]
Rasterize[result, Background -> Black]

Brief explanation of how it works:
Choose your favourite binarization method that produces relatively precise sharp edges
Apply it to an up-scaled image, then downscale the obtained
maskto the original size. This gives us antialiasing. Most of the work is done.For a small improvement, blend the image onto the background using the brightness of its negative as alpha, then blend the obtained image over the original in a thin region around the edges (
edgemask) to reduce the visibility of white pixels on the edges. The alpha channel corresponding to these operations is calculated (the somewhat crypticImageMultiply/Addexpression).Now we have an estimate of the alpha channel so we can do a reverse blend.
Steps 3 & 4 don't improve that much, but the difference is visible.
Perhaps, depending on the edge quality you need:
img = Import@"https://i.sstatic.net/k7E1F.png";
mask = ChanVeseBinarize[img, TargetColor -> {1., 1., 1.}, "LengthPenalty" -> 10]
mask1 = Blur[Erosion[ColorNegate[mask], 2], 5]
Rasterize[SetAlphaChannel[img, mask1], Background -> None]

Edit
Stealing a bit from @Szabolcs
img2 = Import@"https://i.sstatic.net/k7E1F.png";
(*key point:scale up image to smooth the edges*)
img = ImageResize[img2, 4 ImageDimensions[img2]];
mask = ChanVeseBinarize[img, TargetColor -> {1., 1., 1.}, "LengthPenalty" -> 10];
mask1 = Blur[Erosion[ColorNegate[mask], 8], 10];
f[col_] := Rasterize[SetAlphaChannel[img, mask1], Background -> col,
ImageSize -> ImageDimensions@img2]
GraphicsGrid[{{f@Red, f@Blue, f@Green}}]
Click to enlarge
Edit 2
Just to get an idea of the extent of the halo and background imperfections in the image:
img = Import@"https://i.sstatic.net/k7E1F.png";
Join[{img}, MapThread[Binarize, {ColorSeparate[img, "HSB"], {.01, .01, .99}}]]

ColorNegate@ImageAdd[EntropyFilter[img, 1] // ImageAdjust, ColorNegate@img]




