• opencv学习笔记(05)——操作相邻区域


    下面的例子以灰度图像为例:

    #include <opencv2highguihighgui.hpp>
    #include <opencv2imgprocimgproc.hpp>
    #include <opencv2corecore.hpp>
    
    
    using namespace cv;
    
    void sharpen(const cv::Mat& img_original, cv::Mat& img_altered);    
    
    void sharpen2D(const cv::Mat& img_original, cv::Mat& img_altered);    
    
    int main()
    {
    
        cv::Mat img_original = cv::imread("F:\images\boldt.jpg", cv::IMREAD_GRAYSCALE );     
        cv::Mat img_altered = img_original.clone();
    
        // 锐化
        sharpen2D(img_original, img_altered);        
    
        cv::namedWindow("orignal");
        cv::imshow("orignal", img_original);
        cv::namedWindow("altered");
        cv::imshow("altered", img_altered);
    
        cv::waitKey();
    
        return 0;
    }
    
    void sharpen(const cv::Mat& img_original, cv::Mat& img_altered)    
    {
    
        int nc = img_original.cols;
        int nl = img_original.rows;
        
        for(int j=1; j<nl-1; j++)
        {
            const uchar* previous = img_original.ptr<const uchar>(j-1); 
            const uchar* current = img_original.ptr<const uchar>(j); 
            const uchar* next = img_original.ptr<const uchar>(j+1); 
    
            uchar*     output = img_altered.ptr<uchar>(j);    
    
            for(int i=1; i<nc-1; i++)
            {
                *output++ = saturate_cast<uchar>( 5 * current[i] - previous[i] - next[i] - current[i-1] - current[i+1] );    
            }
        }
    
        img_altered.row(0).setTo(cv::Scalar(0));
        img_altered.row(nl-1).setTo(cv::Scalar(0));
        img_altered.col(0).setTo(cv::Scalar(0));
        img_altered.col(nc-1).setTo(cv::Scalar(0));
    
    }
    
    
    void sharpen2D(const cv::Mat& img_original, cv::Mat& img_altered)
    {
        Mat kernel(3, 3, CV_32F, cv::Scalar(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;
        kernel.at<float>(1,1) = 5.0;
    
        //Mat_<cv::Scalar> kernel2 = kernel;
        //kernel2(0,1) = -1.0;
        //kernel2(1,0) = -1.0;
        //kernel2(1,2) = -1.0;
        //kernel2(2,1) = -1.0;
        //kernel2(1,1) = 5.0;
    
        cv::filter2D(img_original, img_altered, img_original.depth(), kernel);    
    
    }

    下面是彩色图像的例子:

  • 相关阅读:
    201521123036 《Java程序设计》第1周学习总结
    201521123075 《Java程序设计》第2周学习总结
    201521123075 《Java程序设计》第1周学习总结
    201521123039 《java程序设计》第一周学习总结(新)
    201521123039 《java程序设计》第一周学习总结
    201521123084 《Java程序设计》第2周学习总结
    Problem
    第一周作业及第一周学习总结
    Hello
    201521123092《java程序设计》第八周学习总结
  • 原文地址:https://www.cnblogs.com/takeaction/p/3747743.html
Copyright © 2020-2023  润新知