我想在我的Android应用程序中使用imgradient()
matlab
函数使用opencv.
我该怎么做?opencv
的哪个函数等同于Matlab { {1}}功能。
我使用下面提到的功能是对的吗?
imgradient()
答案 0 :(得分:0)
您是否尝试过使用sobel
或canny
运算符?
答案 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),可以获得更好的性能。
希望它有所帮助!