SEHException when I want to merge channels in OpenCV [closed]

asked 2015-02-05 21:34:43 -0600

nob_forward gravatar image

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

berak gravatar image

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.

edit retag flag offensive reopen merge delete

Closed for the following reason the question is answered, right answer was accepted by sturkmen
close date 2020-09-27 08:52:11.602997

Comments

2

"before merging channels it works well." - i kinda doubt that.

  • since you're new to this: avoid mixing opencv and managed c++, winforms. you can live without a textbox.
  • do not use cvCreateMat or the like. cv::Mat has its own constructors, mixing in deprecated c-api functionality is the straight way to hell
  • you cannot delete the items, you push into your vector<bool*>, and expect them to be valid later
berak gravatar imageberak ( 2015-02-06 01:32:25 -0600 )edit