Ask Your Question

Revision history [back]

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 code:

Mat FResult = cvCreateMat(heigh, widt, CV_8UC1);
    merge(Vector, FResult);//Vector is components vector
    imwrite("merged.jpg", FResult);
    namedWindow("Display window", WINDOW_AUTOSIZE);
    imshow("Display window", FResult);
    waitKey(0);
    destroyWindow("DisplayWindow");

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");