Ask Your Question

Revision history [back]

SEHException when I want to merge channels in OpenCV

This is code: int l = label1->Text->Length; int* codes = new int[l]; for (int i = 0; i <l; i++)="" {="" int="" a="label1-">Text[i]; codes[i] = label1->Text[i]; } System::String^ start = "p0ChAT0K"; System::String^ finish = "J93K@dfa"; System::String^ Result = label1->Text; length = start->Length + finish->Length + Result->Length; bool* Cypher = new bool[length * 8];//зашифрованный текст в бинарном виде if (radioButton2->Checked) { Cypher = ModVisioner(codes, start, finish, l); } int textsize = length * 8; int contsize = 3 * widt*heigh; if (textsize * 2<contsize) внедрение="" в="" каждый="" второй="" младший="" бит="" {="" label2-="">Text = "Good Image"; } else { label2->Text = "Bad Image"; }

             vector<int>Cv;
             for (int m = 0; m < 3; m++)
             {


                 for (int i = 0; i < widt; i++)
                 {

                     for (int j = 0; j < heigh; j++)
                     {
                         uchar temp1 = Matvector[2 - m].at<uchar>(j, i);
                         Cv.push_back(temp1);


                     }
                 }
             }

             vector<int>Sv;//вектор изображения с ЦВЗ
             vector< bool*>v;
             for (int m = 0; m < length; m++)//текст в двоичной форме
             {
                 bool* b = new bool[8];
                 for (int i = 0; i<8; i++)
                 {
                     b[i] = Cypher[m * 8 + i];
                 }
                 v.push_back(b);
                 delete b;
             }


             for (int i = 0; i < contsize; i++)
             {

                 bool* P = new bool[8];//замена младшего бита
                 P = Decimal2Binary(Cv[i]);
                 if ((i % 2 == 0) && (i<length * 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));
                 delete P;
             }


             Mat Vector1 = cvCreateMat(heigh, widt, CV_8UC1);
             Mat Vector2 = cvCreateMat(heigh, widt, CV_8UC1);
             Mat Vector3 = cvCreateMat(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[2 - m].at<uchar>(j, i) = Sv[i*heigh + j];



                     }
                 }

             }

             Mat FResult = cvCreateMat(heigh, widt, CV_8UC1);
             merge(Vector, FResult);//error here
             imwrite("merged.jpg", FResult);
             return FResult;

It is a code of steganoalgorithm LSB in OpenCV. before merging channels it works well. Please,help me and tell me why this exception is happens.

click to hide/show revision 2
No.2 Revision

updated 2015-02-06 01:16:50 -0600

berak gravatar image

SEHException when I want to merge channels in OpenCV

This is code: code:

 int l = label1->Text->Length;
                 int* codes = new int[l];
                 for (int i = 0; i <l; i++)="" {="" int="" a="label1-">Text[i];
i++)
                 {
                     int a = label1->Text[i];
                     codes[i] = label1->Text[i];
                 }
                 System::String^ start = "p0ChAT0K";
                 System::String^ finish = "J93K@dfa";
                 System::String^ Result = label1->Text;
                 length = start->Length + finish->Length + Result->Length;
                 bool* Cypher = new bool[length * 8];//зашифрованный текст в бинарном виде
                 if (radioButton2->Checked)
                 {
                     Cypher = ModVisioner(codes, start, finish, l);
                 }
                 int textsize = length * 8;
                 int contsize = 3 * widt*heigh;
                 if (textsize * 2<contsize) внедрение="" в="" каждый="" второй="" младший="" бит="" {="" label2-="">Text 2<contsize)//внедрение в каждый второй младший бит
                 {
                     label2->Text = "Good Image";
                 }
                 else
                 {
                     label2->Text = "Bad Image";
                 }

}

                 vector<int>Cv;
              for (int m = 0; m < 3; m++)
              {


                  for (int i = 0; i < widt; i++)
                  {

                      for (int j = 0; j < heigh; j++)
                      {
                          uchar temp1 = Matvector[2 - m].at<uchar>(j, i);
                          Cv.push_back(temp1);


                      }
                  }
              }

              vector<int>Sv;//вектор изображения с ЦВЗ
              vector< bool*>v;
              for (int m = 0; m < length; m++)//текст в двоичной форме
              {
                  bool* b = new bool[8];
                  for (int i = 0; i<8; i++)
                  {
                      b[i] = Cypher[m * 8 + i];
                  }
                  v.push_back(b);
                  delete b;
              }


              for (int i = 0; i < contsize; i++)
              {

                  bool* P = new bool[8];//замена младшего бита
                  P = Decimal2Binary(Cv[i]);
                  if ((i % 2 == 0) && (i<length * 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));
                  delete P;
              }


              Mat Vector1 = cvCreateMat(heigh, widt, CV_8UC1);
              Mat Vector2 = cvCreateMat(heigh, widt, CV_8UC1);
              Mat Vector3 = cvCreateMat(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[2 - m].at<uchar>(j, i) = Sv[i*heigh + j];



                      }
                  }

              }

              Mat FResult = cvCreateMat(heigh, widt, CV_8UC1);
              merge(Vector, FResult);//error here
              imwrite("merged.jpg", FResult);
              return FResult;

It is a code of steganoalgorithm LSB in OpenCV. before merging channels it works well. Please,help me and tell me why this exception is happens.