机器视觉作业--空间滤波
·
编程练习:
1,中值滤波。3x3的区域内取中间值即第五个值。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 创建一个大小为3x4的灰度图像
Mat gray = (Mat_<uchar>(3, 4) <<
20, 100, 150, 30,
50, 0, 110, 90,
70, 80, 130, 50
);
//进行中值滤波,并输出
Mat filtered;
medianBlur(gray, filtered, 3);
namedWindow("gray", WINDOW_GUI_NORMAL);
namedWindow("filtered", WINDOW_GUI_NORMAL);
imshow("gray", gray);
imshow("filtered", filtered);
//打印出filtered的每个像素值
for (int i = 0; i < filtered.rows; i++) {
for (int j = 0; j < filtered.cols; j++) {
cout << (int)filtered.at<uchar>(i, j) << " ";
}
cout << endl;
}
waitKey(0);
return 0;
}

滤波结果:
20 100 100 90
50 80 90 90
70 80 80 90
2:均值滤波
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 创建一个大小为3x4的灰度图像
Mat gray = (Mat_<uchar>(3, 4) <<
20, 100, 150, 30,
50, 0, 110, 90,
70, 80, 130, 50
);
//进行普通均值滤波,并输出
Mat filtered;
blur(gray, filtered, Size(3, 3));
namedWindow("gray", WINDOW_GUI_NORMAL);
namedWindow("filtered", WINDOW_GUI_NORMAL);
imshow("gray", gray);
imshow("filtered", filtered);
//打印出filtered的每个像素值
for (int i = 0; i < filtered.rows; i++) {
for (int j = 0; j < filtered.cols; j++) {
cout << (int)filtered.at<uchar>(i, j) << " ";
}
cout << endl;
}
waitKey(0);
return 0;
}
这是滤波后的像素值:
36 66 76 106
56 79 82 106
37 67 73 103
3:简单的卷积核滤波
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 创建一个大小为3x4的灰度图像
Mat gray = (Mat_<uchar>(3, 4) <<
20, 100, 150, 30,
50, 0, 110, 90,
70, 80, 130, 50
);
//卷积核
Mat kernel = (Mat_<char>(3,3)<<
1,0,0,
0,0,0,
0,0,1
);
//用kernel作为卷积核对gray进行滤波边缘像素保留原值,并输出
Mat filtered;
filter2D(gray, filtered, -1, kernel, Point(-1, -1), 0, BORDER_REPLICATE);
namedWindow("gray", WINDOW_GUI_NORMAL);
namedWindow("filtered", WINDOW_GUI_NORMAL);
imshow("gray", gray);
imshow("filtered", filtered);
//打印出filtered的每个像素值
for (int i = 0; i < filtered.rows; i++) {
for (int j = 0; j < filtered.cols; j++) {
cout << (int)filtered.at<uchar>(i, j) << " ";
}
cout << endl;
}
waitKey(0);
return 0;
}

滤波结果:
20 130 190 240
100 150 150 200
130 180 50 160
更多推荐


所有评论(0)