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
  • 相关阅读:
    第四周:卷积神经网络 part3
    第四周作业:卷积神经网络学习part3
    视频学习--《 图像语义分割前沿进展》
    视频学习--《语义分割中的自注意力机制和低秩重建》
    第二次作业:卷积神经网络 part 1
    使用VGG模型迁移学习进行猫狗大战
    使用 VGG16 对 CIFAR10 分类
    CIFAR10 数据集分类
    MNIST数据集分类
    第一次作业:深度学习基础
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9425517.html
Copyright © 2011-2022 走看看