gpt4 book ai didi

c++ - opencv2.4.13 中的 Min, Max, Avg 过滤器

转载 作者:太空狗 更新时间:2023-10-29 19:57:12 24 4
gpt4 key购买 nike

在 opencv2.4.13 中是否有任何内置函数可以将最小、最大和平均过滤器应用于图像?我正在使用 C++。

最佳答案

正如@Miki 在评论中提到的,boxfilter是均值滤波器。只需设置所需的内核大小并保留 normalize=true(默认值)。

函数erodedilate分别是最小和最大过滤器。您可以使用 createMorphologyFilter 创建内核,创建您自己的,或像我一样使用默认的 3x3。边界默认设置为 +inf for erode-inf for dilate 所以它们不会影响结果。

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]

关于c++ - opencv2.4.13 中的 Min, Max, Avg 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com