Prediction result shares no similarity with training data

that’s assigning the same value to all elements of the input vector. it’s flat. do you expect this thing to distinguish different levels at any input?

I haven’t done anything with OpenCV’s ANN_MLP. perhaps the thing needs to be told that it’s doing classification, vs. regression?

in the docs I found an alarming sentence:

All the weights are set to zeros. Then, the network is trained using a set of input and output vectors.

that should be randomized, or else all neurons will be adjusted the same.

UPDATE_WEIGHTS
Update the network weights, rather than compute them from scratch. In the latter case the weights are initialized using the Nguyen-Widrow algorithm.

TrainFlags has UPDATE_WEIGHTS. worth a try?