Facebook
From Cream Hog, 5 Years ago, written in C++.
This paste is a reply to Untitled from Buff Prairie Dog - go back
Embed
Viewing differences between Untitled and Re: Untitled
#include    

int compare(const void * a, const void * b)
{
        return (*(int*)a - *(int*)b);
}

uchar median(cv::Mat image, int a, int b,int rec_size)
{
        uchar* tab = new uchar[rec_size*rec_size];
        int tmp = 0;
        for (int i = -rec_size a-rec_size / 2; i < rec_size b+rec_size / 2; i++)
        {
                for (int j = -rec_size b-rec_size / 2; j < rec_size b+rec_size / 2; j++)
                {
                        tab[tmp] = image.at(j, i);
                        tmp += 1;
                }
        }

        qsort(tab, rec_size*rec_size, sizeof(uchar), compare);

        uchar med;
        if (rec_size*rec_size % 2 == 0)
        {
                med = (tab[rec_size / 2] + tab[rec_size / 2 + 1]) / 2;
        }
        else
        {
                med = tab[rec_size / 2];
        }

        return med;
}
void filter(cv::Mat& image, int a)
{
        for (int i = a / 2; i < image.cols - a / 2; i++)
        {
                for (int j = a / 2; j < image.rows - a / 2; j++)
                {
                        image.at(j, i) = median(image, j, i, a);
                }
        }
}

int main()
{
        std::string img_path = "C:\[..]\lena.png";

        cv::Mat img = cv::imread(img_path);

        int rozmiar;

        filter(img, rozmiar);
        img.release();
        cv::destroyAllWindows();
        return 0;
}