是否有计算两幅图像中所有像素大小的函数?

are there function to calc magnitude of all pixels in two images?

我有关于 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 中是否有任何函数可以在不访问所有像素的情况下计算所有像素的大小 通过循环

谢谢:)

是的,'cv::magnitude':

计算二维向量的大小。 C++: void magnitude(InputArray x, InputArray y, OutputArray magnitude) Python: cv2.magnitude(x, y[ magnitude]) → magnitude 参数: x – 向量 x 坐标的浮点数组。 y – 向量 y 坐标的浮点数组;它的大小必须与 x 相同。 magnitude – 与 x 具有相同大小和类型的输出数组。 函数 magnitude 计算由 x 和 y 数组的相应元素形成的二维向量的大小:

检查此 link:https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#magnitude

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