fpga_feixiang 发表于 2020-5-27 23:14:01

均值滤波C代码

#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include<ctime>
using namespace cv;
using namespace std;

//均值滤波
void AverFiltering(const Mat &src,Mat &dst) {
        if (!src.data) return;
        //at访问像素点
        for (int i = 1; i<src.rows; ++i)
                for (int j = 1; j < src.cols; ++j) {
                        if ((i - 1 >= 0) && (j - 1) >= 0 && (i + 1)<src.rows && (j + 1)<src.cols) {//边缘不进行处理
                                dst.at<Vec3b>(i, j) = (src.at<Vec3b>(i, j) + src.at<Vec3b>(i - 1, j - 1) + src.at<Vec3b>(i - 1, j) + src.at<Vec3b>(i, j - 1) +
                                        src.at<Vec3b>(i - 1, j + 1) + src.at<Vec3b>(i + 1, j - 1) + src.at<Vec3b>(i + 1, j + 1) + src.at<Vec3b>(i, j + 1) +
                                        src.at<Vec3b>(i + 1, j)) / 9;
                                dst.at<Vec3b>(i, j) = (src.at<Vec3b>(i, j) + src.at<Vec3b>(i - 1, j - 1) + src.at<Vec3b>(i - 1, j) + src.at<Vec3b>(i, j - 1) +
                                        src.at<Vec3b>(i - 1, j + 1) + src.at<Vec3b>(i + 1, j - 1) + src.at<Vec3b>(i + 1, j + 1) + src.at<Vec3b>(i, j + 1) +
                                        src.at<Vec3b>(i + 1, j)) / 9;
                                dst.at<Vec3b>(i, j) = (src.at<Vec3b>(i, j) + src.at<Vec3b>(i - 1, j - 1) + src.at<Vec3b>(i - 1, j) + src.at<Vec3b>(i, j - 1) +
                                        src.at<Vec3b>(i - 1, j + 1) + src.at<Vec3b>(i + 1, j - 1) + src.at<Vec3b>(i + 1, j + 1) + src.at<Vec3b>(i, j + 1) +
                                        src.at<Vec3b>(i + 1, j)) / 9;
                        }
                        else {//边缘赋值
                                dst.at<Vec3b>(i, j) = src.at<Vec3b>(i, j);
                                dst.at<Vec3b>(i, j) = src.at<Vec3b>(i, j);
                                dst.at<Vec3b>(i, j) = src.at<Vec3b>(i, j);
                        }
                }
}
//图像椒盐化
void salt(Mat &image, int num) {
        if (!image.data) return;//防止传入空图
        int i, j;
        srand(time(NULL));
        for (int x = 0; x < num; ++x) {
                i = rand() % image.rows;
                j = rand() % image.cols;
                image.at<Vec3b>(i, j) = 255;
                image.at<Vec3b>(i, j) = 255;
                image.at<Vec3b>(i, j) = 255;
        }
}
void main() {
        Mat image = imread("路飞.jpg");

        Mat Salt_Image;
        image.copyTo(Salt_Image);
        salt(Salt_Image, 3000);

        Mat image1(image.size(), image.type());
        Mat image2;
        AverFiltering(Salt_Image, image1);
        blur(Salt_Image, image2, Size(3, 3));//openCV库自带的均值滤波函数
        imshow("原图", image);
        imshow("自定义均值滤波", image1);
        imshow("openCV自带的均值滤波", image2);
        waitKey();
}

大鹏 发表于 2020-5-31 15:50:13

均值滤波C代码

月影星痕 发表于 2020-5-31 17:34:47

均值滤波C代码

大鹏 发表于 2022-5-10 16:33:15

均值滤波C代码

zxopenhl 发表于 2022-5-13 09:11:19

均值滤波C代码
页: [1]
查看完整版本: 均值滤波C代码