问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

opencv 怎么对图像进行锐化

发布网友 发布时间:2022-05-10 16:33

我来回答

1个回答

热心网友 时间:2023-04-25 15:50

直接给你demo

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

//输入形参为pass by conference-const,保证输入的图像不会被修改,并且为传递引用
void sharpenImage0(const cv::Mat &image, cv::Mat &result)
{
    //为输出图像分配内存
    result.create(image.size(),image.type());
    
    /*滤波核为拉普拉斯核3x3:
                             0 -1 0
                            -1 5 -1
                             0 -1 0   
    */
    for(int j= 1; j<image.rows-1; ++j)
    {
        const uchar *previous = image.ptr<const uchar>(j-1);
        const uchar *current = image.ptr<const uchar>(j);
        const uchar *next = image.ptr<const uchar>(j+1);
        uchar *output = result.ptr<uchar>(j);
        for(int i= 1; i<image.cols-1; ++i)
        {
            *output++ = cv::saturate_cast<uchar>(5*current[i]-previous[i]-next[i]-current[i-1]-current[i+1]);  //saturate_cast<uchar>()保证结果在uchar范围内
        }
    }
    result.row(0).setTo(cv::Scalar(0));
    result.row(result.rows-1).setTo(cv::Scalar(0));
    result.col(0).setTo(cv::Scalar(0));
    result.col(result.cols-1).setTo(cv::Scalar(0));
}

void sharpenImage1(const cv::Mat &image, cv::Mat &result)
{
    //创建并初始化滤波模板
    cv::Mat kernel(3,3,CV_32F,cv::Scalar(0));
    kernel.at<float>(1,1) = 5.0;
    kernel.at<float>(0,1) = -1.0;
    kernel.at<float>(1,0) = -1.0;
    kernel.at<float>(1,2) = -1.0;
    kernel.at<float>(2,1) = -1.0;

    result.create(image.size(),image.type());
    
    //对图像进行滤波
    cv::filter2D(image,result,image.depth(),kernel);
}

int main(int argc, char* argv[])
{
    cv::Mat image = cv::imread("../boldt.jpg");
    cv::Mat image_gray;
    image_gray.create(image.size(),image.type());

    if(!image.data)
        return -1;
    if(image.channels() == 3)
        cv::cvtColor(image,image_gray,CV_RGB2GRAY);

    cv::Mat result;
    result.create(image_gray.size(),image_gray.type());
    double time_ = static_cast<double>(cv::getTickCount());
    sharpenImage0(image_gray,result);
    time_ = 1000*(static_cast<double>(cv::getTickCount())-time_)/cv::getTickFrequency();
    std::cout<<"time = "<<time_<<"ms"<<std::endl;

    cv::namedWindow("Image 1");
    cv::imshow("Image 1",result);

    cv::Mat result1;
    result1.create(image_gray.size(),image_gray.type());
    time_ = static_cast<double>(cv::getTickCount());
    sharpenImage1(image_gray,result1);
    time_ = 1000*static_cast<double>(cv::getTickCount()-time_)/cv::getTickFrequency();
    std::cout<<"time = "<<time_<<"ms"<<std::endl;

    cv::namedWindow("Image 2");
    cv::imshow("Image 2",result1);

    cv::waitKey();
    return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
太和县环球嘉年华港口有限公司怎么样? 为什么抵触相亲? 鸡蛋怎么做好吃家常做法大全 为何抵触相亲 为什么很多人都抵触相亲? 鸡蛋怎么做才营养好吃呢? 怎么可以搞到110电话打过去给别人 植发后能保持多久?有人知道吗? 银联储蓄卡包括什么 怎么让电脑图标变小如何将电脑桌面上软件变小 以前用的怎么才能找回来? 求助opencv怎么把这扭曲图像校正 用Opencv如何去除图片的噪点和划痕 OpenCV图像灰度化是怎么做的呢 我听说联通有个新春特惠流量包,收费标准是? OpenCV 中图像处理问题 一个平面设计项目都包括什么(最好是保健品的) 设计一个保健品的stp战略 联通的新春特惠流量包,怎么收费? 开发一种保健品需要什手续? opencv怎么样实现缩放图像不失真? 保健品跟软件设计哪个前途光明 广西特惠流量包资费介绍? 如何找回以前的? 完美保健品产品介绍在呢,怎样能做好完美? 保健品;食品包装设计哪家公司设计的好,且收费合理 用OpenCV可以不可以使模糊图像变清晰呢? 请教怎么用opencv将一张模糊的图片变清晰 保健品标签设计应注意什么 浙江大学美术特长生录取分数线 这个联通14GB国内7天特惠流量包(后向)怎么用? 以前用的怎么才能找回来? 联通暑期特惠流量加油包10元2GB是国内还是省内的? 另注册了,原来的微信就没有了,怎样才能找回原来的? 晚间特惠流量是全国通用,还是本地? 一个手机号码注册了两个之前那个微信怎么找回来? 内蒙古呼和浩特市区有几家可以做DNA亲子鉴定的机构? 呼和浩特亲子鉴定机构有哪些 请问各位大神呼和浩特哪里可以做亲子鉴定?急、急。 呼和浩特市哪里能做亲子鉴定? 一般要多长时间? 在呼和浩特市哪里可以能做DNA的,收费还不是很高 呼市可以做亲子鉴定吗 锡盟人想做个上户的亲子鉴定,内蒙古能做亲子鉴定的机构在哪里? 手机号码绑定了另一个要怎么才能找回原来的? 我以前的突然不见了怎么找回来了- 问一问 谁知道北京或者呼和浩特哪里可以做亲子鉴定,要正规医院或者机构的, 通辽哪里可以做dna亲子鉴定 以前的弄不回来怎么办? 以前用过的怎么恢复呢 用手机号注册了一个新,以前的不见了,怎么找回?