изменить размер прямоугольников с помощью cvTransform и cvGetAffineTransform openCv - PullRequest
0 голосов
/ 04 июля 2011

Я имею дело с многомасштабными изображениями, 3 размера: оригинал, половина и двойной я извлекаю подключенные компоненты из каждого из них в отдельности, затем делаю некоторые вычисления

наконец, я хочу отобразить ограничивающие прямоугольники подключенных компонентов половинной и двойной шкалы к их исходному расположению и размеру в исходном изображении

вот мой код изменения размера и перемещения ограничивающего прямоугольника

        Matrix<int> src = new Matrix<int>(3, 2,3);
        Matrix<int> dst = new Matrix<int>(3, 2,2);

        IntPtr mat = CvInvoke.cvCreateMat(2, 3, MAT_DEPTH.CV_32F);

        src[0,0]=componentBRect.X;
        src[0,1]=componentBRect.Y ;
        src[1,0]=componentBRect.Right;
        src[1,1]=componentBRect.Y;
        src[2,0]=componentBRect.X;
        src[2,1]=componentBRect.Bottom;





        CvInvoke.cvGetAffineTransform(img2, img, mat); //img is the original image & img2 has been resized to 1/2 imgWidth and 1/2 imgHeight

        CvInvoke.cvTransform(src.Ptr, dst.Ptr, mat, IntPtr.Zero);

предполагается получить dst очки, измененные и перемещенные но, к сожалению, те же точки возвращаются снова, я думаю, что есть проблема с getAffineTransform, поскольку он возвращает единичную матрицу

 mat= 
 |1 0 0 |
 |0 1 0 | !!

Любые предложения ?? или есть другой способ сделать то, что я хочу, без использования аффинного преобразования

Заранее спасибо

1 Ответ

1 голос
/ 05 июля 2011

Я решил,

Я просто нашел другую функцию - это cvConvertScale

       for (int i = 0; i < Brectangles.Count; i++) {

            src[0, 0] = Brectangles[i].X;    //top left
            src[0, 1] = Brectangles[i].Y;
            src[1, 0] = Brectangles[i].Right;  //top right
            src[1, 1] = Brectangles[i].Y;
            src[2, 0] = Brectangles[i].X;    //bottom left
            src[2, 1] = Brectangles[i].Bottom;


            CvInvoke.cvConvertScale(src, dst, rescaleFactor, 0); // rescaleFactor variable is 2 for half size & 0.5 for double size

            temp.X = dst[0, 0];
            temp.Y = dst[0, 1];
            temp.Width = dst[1, 0] - dst[0, 0];
            temp.Height = dst[2, 1] - dst[0, 1];

            Brectangles[i] = temp;


         }

Она изменяет размеры прямоугольника и перемещает его в правильное положение - новый размер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...