2011-12-14 47 views

回答

14

假設您指的是典型的image gradient;您可以使用Chris提到的Sobel算子輕鬆計算這些值。查看Sobel Derivatives教程here。您可能還對Laplace運營商及其tutorial感興趣。

下面是使用計算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, Dy, CV_64F, 0, 1, 3); 
0

正如MEVATRON說:索貝爾和拉普拉斯運營商強大的,但不要忘了Scharr運營商,在3×3內核上比Sobel具有更高的精度。

4

來源:http://en.wikipedia.org/wiki/Image_gradient,你可以這樣做:

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); 
} 
相關問題