如何在opencv android java中实现matlab的imgradient()函数

时间:2014-04-14 07:12:13

标签: java android matlab opencv

我想在我的Android应用程序中使用imgradient() matlab函数使用opencv.我该怎么做?opencv的哪个函数等同于Matlab { {1}}功能。

我使用下面提到的功能是对的吗?

imgradient()

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用sobelcanny运算符?

答案 1 :(得分:0)

由于matlab imgradient()为坐标为x,y)的每个像素返回渐变“幅度”(即sqrt(dx(x,y)²+ dy(x,y)²),您可能想要做某事喜欢:

// 1) Get the horizontal gradient
Mat kH = (cv::Mat_<double>(1,3) << -1,0,1); // differential kernel in x
Mat Dx;
filter2D(image, Dx, -1, kH, cv::Point(-1,-1), 0);

// 2) Get the vertical gradient
Mat kV = (cv::Mat_<double>(3,1) << -1,0,1); // differential kernel in y
Mat Dy;
filter2D(image, Dy, -1, kV, cv::Point(-1,-1), 0);

// 3) Get sqrt(dx²+dy²) in each point
for(int i=0; i<Dx.rows; i++)
    for(int j=0; j<Dx.cols; j++)
        Dmag.at<double>(i,j) = sqrt(pow(Dx.at<double>(i,j),2)+pow(Dy.at<double>(i,j),2));

它应该能得到你想要的东西。通过访问渐变数据而不是为每个像素使用.at(i,j),可以获得更好的性能。

希望它有所帮助!