Есть ли функция для калибровки c величины всех пикселей в двух изображениях? - PullRequest
0 голосов
/ 28 февраля 2020

у меня есть мой код, относящийся к операции sobel

        Image<Gray, double> test_x= new Image<Gray, double>(img_gray.Size);
        Image<Gray, double> test_y = new Image<Gray, double>(img_gray.Size);
        Image<Gray, byte> final = new Image<Gray, byte>(img_gray.Size);
        CvInvoke.Sobel(img_gray, test_x, DepthType.Cv64F,1,0);
        CvInvoke.Sobel(img_gray, test_y, DepthType.Cv64F, 0, 1);
        for (int x = 0; x < img_gray.Cols; x++)
        {
            for (int y = 0; y < img_gray.Rows; y++)
            {
                double mag = Math.Pow(test_x[y, x].Intensity, 2) + Math.Pow(test_y[y, x].Intensity, 2);
                mag = Math.Sqrt(mag);
                if (mag > 125)
                {
                    final[y, x] = new Gray(255);
                }
                else
                {
                    final[y, x] = new Gray(0);
                }
            }
        }
        imageBox2.Image = final;

этот код требует времени, чтобы показать мне результат

есть ли в opencv какая-либо функция для вычисления c величины всех пикселей без доступа ко всем пикселям в течение l oop

Спасибо:)

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

EmguCv имеет функцию для этого. Как быстро это я оставлю тебе решать

Image<Gray, double> test_x= new Image<Gray, double>(img_gray.Size);
Image<Gray, double> test_y = new Image<Gray, double>(img_gray.Size);
CudaImage<Gray, double> final = new CudaImage<Gray, double>(img_gray.Size);
CvInvoke.Sobel(img_gray, test_x, DepthType.Cv64F,1,0);
CvInvoke.Sobel(img_gray, test_y, DepthType.Cv64F, 0, 1);
CudaImage<Gray, double> xCuda = new CudaImage<Gray, double>(test_x);
CudaImage<Gray, double> yCuda = new CudaImage<Gray, double>(test_y);
CudaInvoke.Magnitude(xCuda, yCuda, final);
0 голосов
/ 28 февраля 2020

Да, 'cv :: magnitude':

Вычисляет величину 2D векторов. C ++: пустая величина (InputArray x, InputArray y, OutputArray magnitude) Python: cv2.magnitude (x, y [, magnitude]) → magnitude Параметры: x - массив с плавающей точкой x-координат векторов. y - массив с плавающей точкой y-координат векторов; он должен иметь такой же размер, как х. величина - выходной массив того же размера и типа, что и x. Функция magnitude вычисляет величину 2D векторов, сформированных из соответствующих элементов массивов x и y:

проверьте эту ссылку: https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#magnitude

...