zoukankan      html  css  js  c++  java
  • 003——矩阵的掩膜操作

    原文链接:OpenCV--矩阵的掩膜操作

    参考链接:OpenCV探索之路(十三):详解掩膜mask

    我的实验代码

    法1

    #include<opencv2/opencv.hpp>
    #include<iostream>
    #include<math.h>
    
    using namespace cv;
    int main(int argc, char **argv)
    {
        Mat src, dst;
        src = imread("./girl.jpg");
        if (!src.data)
        {
            std::cout << "Could not load image...
    " << std::endl;
            return -1;
        }
        namedWindow("Girl", CV_WINDOW_AUTOSIZE);
        imshow("Girl",src);
    
        int cols = src.cols*src.channels();
        int offsetx = src.channels();
        int rows = src.rows;
        dst = Mat::zeros(src.size(), src.type());
        double t = getTickCount();
        for (int row=1; row < rows - 1; row++)
        {
            const uchar* current = src.ptr<uchar>(row);
            const uchar* previous = src.ptr<uchar>(row - 1);
            const uchar* nest = src.ptr<uchar>(row + 1);
            uchar* output = dst.ptr<uchar>(row);
            for (int col = offsetx; col < cols; col++)
            {
                output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + nest[col]));
            }
        }
        double timeconsume = (getTickCount() - t) / getTickFrequency();
    
        std::cout << "耗时:" << timeconsume << std::endl;
        namedWindow("Girl After", CV_WINDOW_AUTOSIZE);
        imshow("Girl After", dst);
        waitKey(0);
        return 0;
    }
    View Code

    法2

    #include<opencv2/opencv.hpp>
    #include<iostream>
    #include<math.h>
    
    using namespace cv;
    int main(int argc, char **argv)
    {
        Mat src, dst;
        src = imread("./girl.jpg");
        if (!src.data)
        {
            std::cout << "Could not load image...
    " << std::endl;
            return -1;
        }
        namedWindow("Girl", CV_WINDOW_AUTOSIZE);
        imshow("Girl",src);
    
        int cols = src.cols*src.channels();
        int offsetx = src.channels();
        int rows = src.rows;
        dst = Mat::zeros(src.size(), src.type());
    
        double t = getTickCount();
        Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
        filter2D(src, dst, src.depth(), kernel);
        double timeconsume = (getTickCount() - t) / getTickFrequency();
    
        std::cout << "耗时:" << timeconsume << std::endl;
        namedWindow("Girl After", CV_WINDOW_AUTOSIZE);
        imshow("Girl After", dst);
        waitKey(0);
        return 0;
    }
    View Code
  • 相关阅读:
    腾讯的张小龙是一个怎样的人?
    wordpress 推荐几个主题
    heidisql 可以查看sql
    phpmyadmin 连接外部数据库
    两个效果不错胡时间轴网站
    phpstorm与Mint 快捷键冲突
    Android Action
    Tomcat server.xml
    awk
    makefile
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9425517.html
Copyright © 2011-2022 走看看