2016-09-29 5 views
1

opencv2.4.13の画像に最小、最大、平均フィルタを適用する組み込み関数はありますか? 私はC++を使用しています。opencv2.4.13のMin、Max、Avgフィルタ

+1

平均フィルタは 'boxFilter'です。最小および最大フィルタはOpenCVには存在しません。しかし、あなたはminフィルタ[here](http://stackoverflow.com/a/33258685/5008845)の実装を見つけることができます。最大フィルタは非常に似ています – Miki

+0

ありがとう、あなたの助けのために、あなたは大歓迎です。 –

+5

@Miki ['erode'](http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=erode#erode)と[' dilate'](http:// docs .opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight = dilate#dilate)minとmaxのフィルタとして機能しませんか? – beaker

答えて

6

@Mikiはコメントに記載されているように、boxfilterは平均フィルタです。必要なカーネルサイズを設定し、normalize=true(デフォルト)のままにしてください。

erodeおよびdilateは、それぞれ最小および最大フィルタです。​​を使ってカーネルを作成したり、自分で作成したり、既成の3x3を使ったりすることができます。境界線は、デフォルトでerodeの場合は+infdilateの場合は-infに設定されているため、結果には寄与しません。ここで

int main(int argc, const char * argv[]) { 

    char image_data[25] = {1, 3, 8, 8, 4, 
          4, 2, 7, 9, 9, 
          1, 5, 0, 5, 9, 
          3, 7, 5, 2, 1, 
          0, 4, 7, 9, 4}; 
    cv::Mat image = cv::Mat(5, 5, CV_8U, image_data); 
    std::cout << "image = " << std::endl << image << std::endl; 

    cv::Mat avgImage; 
    // Perform mean filtering on image using boxfilter 
    cv::boxFilter(image, avgImage, -1, cv::Size(3,3)); 
    std::cout << "avgImage = " << std::endl << avgImage << std::endl; 

    cv::Mat kernel; // Use the default structuring element (kernel) for erode and dilate 

    cv::Mat minImage; 
    // Perform min filtering on image using erode 
    cv::erode(image, minImage, kernel); 
    std::cout << "minImage = " << std::endl << minImage << std::endl; 

    cv::Mat maxImage; 
    // Perform max filtering on image using dilate 
    cv::dilate(image, maxImage, kernel); 
    std::cout << "maxImage = " << std::endl << maxImage << std::endl; 

    return 0; 
} 

結果されています

image = 
[ 1, 3, 8, 8, 4; 
    4, 2, 7, 9, 9; 
    1, 5, 0, 5, 9; 
    3, 7, 5, 2, 1; 
    0, 4, 7, 9, 4] 
avgImage = 
[ 3, 4, 6, 8, 8; 
    3, 3, 5, 7, 7; 
    4, 4, 5, 5, 6; 
    4, 4, 5, 5, 5; 
    5, 5, 5, 4, 4] 
minImage = 
[ 1, 1, 2, 4, 4; 
    1, 0, 0, 0, 4; 
    1, 0, 0, 0, 1; 
    0, 0, 0, 0, 1; 
    0, 0, 2, 1, 1] 
maxImage = 
[ 4, 8, 9, 9, 9; 
    5, 8, 9, 9, 9; 
    7, 7, 9, 9, 9; 
    7, 7, 9, 9, 9; 
    7, 7, 9, 9, 9]