How to shift color values of a single RGB channel
I don't have any direct experience doing this so I might be missing an obvious solution or tool. That said, what you describe is in programming terms comparatively easy to achieve. The basic structure of such a custom processing would be:


Open the image file and get access to the array of pixels it contains.
Iterate over all the pixels and inspect/transform however you want.
Write out the resulting modified image in the desired format.


Both Gimp (1, 2) and Photoshop (tutorial) provide scripting or plugins support which will allow you to provide custom logic for step 2 and handle the rest for you. I don't have any experience with either, but from a very quick overview, I recommend that you use Javascript, Python or another scripting language which will be much more accessible as a new programmer than a language like C.

Another option I found outside of an image editor that looks good is the Python Imaging Library. Here is a very relevant other question on SO: https://stackoverflow.com/questions/36468530/changing-pixel-color-value-in-pil

From it, I was able to write the following Python script that does what you asked:

from PIL import Image

img = Image.open("input.png")
pixels = img.load() # create the pixel map

# configuration
channel = 0 # 0 = red, 1 = green, 2 = blue
change_amount = 2 # can be -2 for decrease
limit = 178

for i in range(img.size[0]): # for every pixel (in 2D):
    for j in range(img.size[1]):
        if pixels[i,j][channel] &lt; limit:
            # Only modify pixels below the set limit.
            # The following "strange" code is used because Python tuples can't be modified
            # directly. The tuple is transformed into a (mutable) list and moved back again
            # to a tuple afterwards. You can safely ignore this and concentrate on the
            # second line that actually modifies a channel's value.
            color = list(pixels[i,j])
            # Increase (or decrease for a negative change_amount value) the chosen channel.
            color[channel] += change_amount
            pixels[i,j] = tuple(color)

img.save("out.png")


This is untested code, but it shows how to translate what you want into code. You already described what you wanted in a very programmer-friendly manner so the translation is almost direct. The sky is the limit then as to what you can do with pixels once you load them in a custom program to manipulate them.