When loading the image as an OpenGL texture, it is important to decide whether it's going to be multiply tiled across the surface or just cover it once across its entire area.
If it is to be tiled, then its wrap S/T properties should be set as follows:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
But if it is supposed to cover the whole surface, then its wrap S/T properties should be defined as follows:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Failure to observe this rule leads to texture edge artifacts especially prominent when the textured surface is being moved in the viewport. Start auto-rotating the carousel model and watch some of its textured quads flicker along their side edges. (see picture below)
This happens because when OpenGL prepares to tile a texture, it automatically blends the colors of texture border pixel rows and columns to make the seams between successive tiles less prominent. The artifact is most vivid when the opposite sides differ very much in color and/or brightness.