2011-12-14 12 views
5

最新のOpenCVを使用すると、特定のcv :: Matのグラデーションイメージを簡単に計算できますか?OpenCVでイメージのグラデーションを計算するためのすばやく簡単な方法はありますか?

+0

サンプル画像を、と期待される結果がいいだろう:http://en.wikipedia.org/wiki/Image_gradientは、あなたが行うことができます。 – Sonaten

+0

微分を計算するSobel演算子をお探しですか? [Documentation here](http://opencv.itseez.com/modules/imgproc/doc/filtering.html#sobel)。 – Chris

答えて

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カーネルで精度が高い

4

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); 
} 
関連する問題