imwrite va richiamato alla fine, al momento di scrivere la bitmap su file; in altre parole, prima scrivi in watermark, poi scrivi su file. Comunque: stabilisci i colori che dovranno avere le singole regioni e mettili in un array il cui indice corrisponde all'indice della regione nella tua matrice di interi:
codice:
Vec3b colors[5];
colors[0]=Vec3b(0, 0, 0); // nero
colors[1]=Vec3b(127, 127, 127); // grigio 50%
colors[2]=Vec3b(255, 0, 0); // rosso
colors[3]=Vec3b(0, 255, 0); // verde
colors[4]=Vec3b(0, 0, 255); // blu
quindi crea l'immagine e piazza su ogni pixel il colore corrispondente nella tua "matrice originale" (che qui chiamerò "mo"):
codice:
Mat watermark(120, 160, CV_8UC3);
for(int x=0; x<120; ++x)
for(int y=0; y<160; ++y)
watermark.at<Vec3b>(x, y)=colors[mo[x][y]];
infine, scrivi il risultato su file:
codice:
imwrite("watermark.bmp", watermark);