C++ 在OpenCV中是否有一种快速简便的方法来计算图像的梯度?
使用最新的OpenCV,是否有一种简单的方法来计算特定cv::Mat的渐变图像?假设您指的是典型的;你可以很容易地用Chris提到的操作符计算这些。看看索贝尔衍生工具教程。您可能还对运营商及其服务感兴趣 下面是使用Sobel计算X和Y渐变的一个简短片段:C++ 在OpenCV中是否有一种快速简便的方法来计算图像的梯度?,c++,opencv,C++,Opencv,使用最新的OpenCV,是否有一种简单的方法来计算特定cv::Mat的渐变图像?假设您指的是典型的;你可以很容易地用Chris提到的操作符计算这些。看看索贝尔衍生工具教程。您可能还对运营商及其服务感兴趣 下面是使用Sobel计算X和Y渐变的一个简短片段: cv::Mat src = ...; // Fill the input somehow. cv::Mat Dx; cv::Sobel(src, Dx, CV_64F, 1, 0, 3); cv::Mat Dy; cv::Sobel(src
cv::Mat src = ...; // Fill the input somehow.
cv::Mat Dx;
cv::Sobel(src, Dx, CV_64F, 1, 0, 3);
cv::Mat Dy;
cv::Sobel(src, Dy, CV_64F, 0, 1, 3);
正如mevatron所说:Sobel算子和Laplace算子很强大,但不要忘记Scharr算子,它在3×3内核上的精度比Sobel算子更高。从:,您可以:
IplImage * diffsizekernel(IplImage *img, int f, int c) {
float dkernel[] = {-1, 0, 1};
CvMat kernel = cvMat(f, c, CV_32FC1, dkernel);
IplImage *imgDiff = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_16S, 1);
cvFilter2D( img, imgDiff, &kernel, cvPoint(-1,-1) );
return imgDiff;
}
IplImage * diffx(IplImage *img) {
return diffsizekernel(img, 3, 1);
}
IplImage * diffy(IplImage *img) {
return diffsizekernel(img, 1, 3);
}
一张示例图像,预期结果会很好。您正在寻找计算导数的Sobel运算符吗。