Grayscale image instead of RGB image
Help me, please. I have 3 color components. When I merging them(function merge()) and then read matrix to image and save them on disk(function imread()), I get grayscale JPEG image instead of color JPEG image. What should I do to get color image?
This is fragment of all code:
string start = "P0ch@t0k";
string finish = "K5k1R9z@";
int allength = start.length() + finish.length() + length;
int* Cypher = new int[allength * 8];//зашифрованный текст в бинарном виде
Cypher = ModVisioner(text, start, finish, length);
string Cyphertext;
for (int i = 0; i < allength; i++)
{
int Temp[8];
for (int j = 0; j < 8; j++)
{
Temp[j] = Cypher[i * 8 + j];
}
Cyphertext.push_back(Binary2Decimal(Temp));
}
cout << Cyphertext << endl;
string Cv;
for (int m = 0; m < 3; m++)
{
for (int i = 0; i < widt; i++)
{
for (int j = 0; j < heigh; j++)
{
Cv.push_back(Matvector[m].at<uchar>(j, i));
}
}
}
string Sv;//вектор изображения с ЦВЗ
vector<int*>v;
for (int m = 0; m < allength; m++)//текст в двоичной форме
{
int* b = new int[8];
for (int i = 0; i < 8; i++)
{
b[i] = Cypher[m * 8 + i];
}
v.push_back(b);
}
for (int i = 0; i < contsize; i++)
{
int* P = new int[8];//замена младшего бита
P = Decimal2Binary((uchar)Cv[i]);
if ((i % 2 == 0) && (i < allength * 2))
{
int k = i / 16;
int l = (i % 16) / 2;
P[7] = v[k][l];
}
else
{
P[7] = rand() % 2;
}
Sv.push_back(Binary2Decimal(P));
}
Mat FResult = cvCreateMat(heigh, Vector1(heigh, widt, CV_8UC1);
Mat Vector2(heigh, widt, CV_8UC1);
Mat Vector3(heigh, widt, CV_8UC1);
vector<Mat> Vector;
Vector.push_back(Vector1);
Vector.push_back(Vector2);
Vector.push_back(Vector3);
for (int m = 0; m < 3; m++)
{
for (int i = 0; i < widt; i++)
{
for (int j = 0; j < heigh; j++)
{
Vector[m].at<uchar>(j, i) = Sv[i*heigh + j];
}
}
}
Mat FResult(heigh, widt, CV_8UC3);
merge(Vector, FResult);//Vector is components vector
FResult);
imwrite("merged.jpg", FResult);
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", FResult);
waitKey(0);
destroyWindow("DisplayWindow");