opencv图像卷积操作

代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;

int main()
{
    Mat src, dst, dst1;
    double t;
    //原图
    src = imread(".//pic//test.jpg",IMREAD_UNCHANGED);
    if (src.empty() || src.empty() || src.empty())
    {
        cout << "找不到图像" << endl;
        return -1;
    }

    namedWindow("opencv startup", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    //矩阵的掩膜操作(手动)
    Mat resultImage;
    src.copyTo(resultImage);
    int nchannels = src.channels();
    int height = src.rows;
    int cols = src.cols;
    int width = src.cols * nchannels;
    const uchar* previous;
    const uchar* current;
    const uchar* next;
    uchar* output;
    t = (double)getTickCount();

    for (int row = 1; row < height - 1; row++)
    {
        previous = src.ptr<uchar>(row - 1);
        current = src.ptr<uchar>(row);
        next = src.ptr<uchar>(row + 1);
        output = resultImage.ptr<uchar>(row);
        for (int col = nchannels; col < nchannels * (src.cols - 1); col++)
        {
            *output = saturate_cast<uchar>(5 * current[col] - previous[col] - next[col] - current[col - nchannels] - current[col + nchannels]);
            output++;
        }
    }
    t = ((double)getTickCount() - t) / getTickFrequency();
    imshow("手动", resultImage);
    cout << "手动计算时间消耗了:" << t << endl;

    //矩阵的掩膜操作(调用api)
    Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    //Mat kernel = (Mat_<float>(3, 3) << 1, 1, 1, 1, 1,1, 1, 1, 1);
    t = (double)getTickCount();
    filter2D(src, dst1, src.depth(), kernel);
    t = ((double)getTickCount() - t) / getTickFrequency();
    cout << "filter2D时间消耗了:" << t << endl;
    imshow("filter2D", dst1);
    waitKey(0);
    return 0;
}

原文地址:https://www.cnblogs.com/xiaochi/p/11994088.html

时间: 2024-08-09 03:19:11

opencv图像卷积操作的相关文章

python——对图像进行卷积操作,使用多个滤波器

线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果.做法很简单.首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像.然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值.这样就完成了滤波过程. 对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关.卷积和协相关的差别是,卷积需要先对滤波矩阵进行180的翻

OpenCV基础(二)---图像像素操作

图像像素操作 通过访问图像的像素,对灰度图像和RGB图像进行反差. 例如,在灰度图像中,某一个像素值为,pixel_value. 那么反差后的pixel_value = 255 - pixel_value. 对RGB图像处理类似,差别在于要对每一个颜色通道进行反差. 方法1: 1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using namespace cv; 5 using namespace std; 6 7

OpenCV图像金字塔

图像金字塔 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 pyrUp 和 pyrDown 对图像进行向上和向下采样. 原理 Note 以下内容来自于Bradski和Kaehler的大作: Learning OpenCV . 当我们需要将图像转换到另一个尺寸的时候, 有两种可能: 放大 图像 或者 缩小 图像. 尽管OpenCV 几何变换 部分提供了一个真正意义上的图像缩放函数(resize, 在以后的教程中会学到),不过在本篇我们首先学习一下使用 图像金字塔来做图像缩放, 图像金字塔

2.opencv图像处理常用操作

图像的平滑处理 平滑,也称 模糊, 平滑处理时需要用到一个滤波器 .滤波器想象成一个包含加权系数的窗口,这个加权系数也叫做核或者模版. '''cpp // 图像平滑处理分而学之.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; const int

[转]OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

[OpenCV入门教程之十三]OpenCV图像金字塔:高斯金字塔.拉普拉斯金字塔与图片尺寸缩放 2014-05-18 18:58 36007人阅读 评论(54) 收藏 举报 本文章已收录于:  OpenCV知识库 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http

【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 这篇文章里,我们将一起探讨图像金字塔的一

SSE图像算法优化系列十一:使用FFT变换实现图像卷积。

本文重点主要不在于FFT的SSE优化,而在于使用FFT实现快速卷积的相关技巧和过程. 关于FFT变换,有很多参考的代码,特别是对于长度为2的整数次幂的序列,实现起来也是非常简易的,而对于非2次幂的序列,就稍微有点麻烦了,matlab中是可以实现任意长度FFT的,FFTW也是可以的,而Opencv则有选择性的实现了某些长度序列的变换,查看Opencv的代码,可以发现其只有对是4的整数次幂的数据部分采用了SSE优化,比如4.16.64.256.1024这样的序列部分,因此基4的FFT是最快的,而剩余

图像卷积

参考链接: http://www.cnblogs.com/freeblues/p/5738987.html http://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1 神经网络中的卷积层,它的原理就来源于图像卷积 概述 卷积在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨论卷积在数字图像处理中的应用. 在数字图像处理中, 有一种基本的处理方法:线性滤波. 待处理的平面数字图像可被看

[opencv]常用阵列操作函数总结

/*=========================================================================*/ // 阵列操作 /*=========================================================================*/ 基本矩阵和图像运算符 ———————————————————————————————————————————————————————————————————————————