C++ 【OpenCV】图像去锯齿

#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, const char** argv)
{
    Mat im = imread("10.jpg", 0);
    Mat cont = ~im;
    imwrite("1.jpg", cont);
    Mat smoothed = Mat(im.rows, im.cols, CV_8UC1, Scalar(0));
    
    // contour smoothing parameters for gaussian filter
   
    threshold(cont, cont, 128, 255, THRESH_BINARY);
    imwrite("3.jpg", cont);
    // 查找轮廓
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    findContours(cont, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

    int filterRadius = 3;
    int filterSize = 2 * filterRadius + 1;
    double sigma = 10;
    for (size_t j = 0; j < contours.size(); j++)
    {
        size_t len = contours[j].size() + 2 * filterRadius;
        size_t idx = (contours[j].size() - filterRadius);
        vector<float> x, y;
        for (size_t i = 0; i < len; i++)
        {
            x.push_back(contours[j][(idx + i) % contours[j].size()].x);
            y.push_back(contours[j][(idx + i) % contours[j].size()].y);
        }
        // filter 1-D signals
        vector<float> xFilt, yFilt;
        GaussianBlur(x, xFilt, Size(filterSize, filterSize), sigma, sigma);
        GaussianBlur(y, yFilt, Size(filterSize, filterSize), sigma, sigma);
        // build smoothed contour
        vector<vector<Point> > smoothContours;
        vector<Point> smooth;
        for (size_t i = filterRadius; i < contours[j].size() + filterRadius; i++)
        {
            smooth.push_back(Point(xFilt[i], yFilt[i]));
        }
        smoothContours.push_back(smooth);

        Scalar color;

        if (hierarchy[j][3] < 0)
        {
            color = Scalar(255);
        }
        else
        {
            color = Scalar(0);
        }
        drawContours(smoothed, smoothContours, 0, color, -1);
    }
    imwrite("10.jpg", smoothed);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向日葵xyz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值