1
是否有任何內置函數將min,max和Avg過濾器應用於opencv2.4.13中的圖像? 我正在使用C++。opencv2.4.13中的最小值,最大值,平均值過濾器
是否有任何內置函數將min,max和Avg過濾器應用於opencv2.4.13中的圖像? 我正在使用C++。opencv2.4.13中的最小值,最大值,平均值過濾器
由於@Miki在評論中提到,boxfilter
是一個平均值過濾器。只需設置你想要的內核大小,並保留normalize=true
(默認值)。
功能erode
和dilate
分別是最小和最大過濾器。您可以使用創建內核,創建您自己的內核,或像我一樣使用默認的3x3。對於erode
和-inf
,對於dilate
,邊界默認設置爲+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]
平均濾波器是'boxFilter'。 OpenCV中不存在最小和最大過濾器。但是,您可以找到最小過濾器的實現[此處](http://stackoverflow.com/a/33258685/5008845)。 Max濾鏡將非常相似 – Miki
非常感謝您的幫助,非常歡迎。 –
@Miki Would ['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)不能用作最小和最大過濾器? – beaker