卷积基本概念

C++代码实现卷积

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. int main(int argc, char** argv)
  6. {
  7. Mat src = imread("f:/images/lena.jpg");
  8. if (src.empty())
  9. {
  10. printf("Could not find the image!\n");
  11. return -1;
  12. }
  13. namedWindow("input", WINDOW_AUTOSIZE);
  14. imshow("input", src);
  15. int h = src.rows;
  16. int w = src.cols;
  17. Mat result = src.clone();
  18. for (int row = 1; row < h - 1; row++) {
  19. for (int col = 1; col < w - 1; col++) {
  20. // 3x3卷积核
  21. int sb =
  22. src.at<Vec3b>(row, col)[0] +
  23. src.at<Vec3b>(row - 1, col - 1)[0] +
  24. src.at<Vec3b>(row - 1, col)[0] +
  25. src.at<Vec3b>(row - 1, col + 1)[0] +
  26. src.at<Vec3b>(row, col - 1)[0] +
  27. src.at<Vec3b>(row, col + 1)[0] +
  28. src.at<Vec3b>(row + 1, col - 1)[0] +
  29. src.at<Vec3b>(row + 1, col)[0] +
  30. src.at<Vec3b>(row + 1, col + 1)[0];
  31. int sg =
  32. src.at<Vec3b>(row, col)[1] +
  33. src.at<Vec3b>(row - 1, col - 1)[1] +
  34. src.at<Vec3b>(row - 1, col)[1] +
  35. src.at<Vec3b>(row - 1, col + 1)[1] +
  36. src.at<Vec3b>(row, col - 1)[1] +
  37. src.at<Vec3b>(row, col + 1)[1] +
  38. src.at<Vec3b>(row + 1, col - 1)[1] +
  39. src.at<Vec3b>(row + 1, col)[1] +
  40. src.at<Vec3b>(row + 1, col + 1)[1];
  41. int sr =
  42. src.at<Vec3b>(row, col)[2] +
  43. src.at<Vec3b>(row - 1, col - 1)[2] +
  44. src.at<Vec3b>(row - 1, col)[2] +
  45. src.at<Vec3b>(row - 1, col + 1)[2] +
  46. src.at<Vec3b>(row, col - 1)[2] +
  47. src.at<Vec3b>(row, col + 1)[2] +
  48. src.at<Vec3b>(row + 1, col - 1)[2] +
  49. src.at<Vec3b>(row + 1, col)[2] +
  50. src.at<Vec3b>(row + 1, col + 1)[2];
  51. result.at<Vec3b>(row, col)[0] = sb / 9;
  52. result.at<Vec3b>(row, col)[1] = sg / 9;
  53. result.at<Vec3b>(row, col)[2] = sr / 9;
  54. }
  55. }
  56. imshow("result", result);
  57. waitKey(0);
  58. destroyAllWindows();
  59. return 0;
  60. }

blur函数

  1. Mat dst;
  2. /*
  3. blur参数:
  4. src:输入
  5. dst:输出
  6. ksize:卷积核大小
  7. anchor:锚定点,默认(-1,-1),中心位置(默认是卷积核大小除以2的位置)
  8. borderType:边缘处理方式,默认为BORDER_DEFAULT=4
  9. */
  10. blur(src, dst, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
  11. imshow("dst", dst);

卷积边缘处理

卷积处理的时候,边缘像素的填充方法:

边缘在卷积开始前就填充好(知道卷积核大小之后)

边缘填充 copyMakeBorder

  1. // 边缘填充 copyMakeBorder
  2. int border = 8;
  3. Mat border_m;
  4. copyMakeBorder(src, border_m, border, border, border, border, BORDER_WRAP, Scalar(0, 0, 255));
  5. imshow("border fill demo", border_m);

opencv:图像卷积的更多相关文章

  1. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...

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

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

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

    本文重点主要不在于FFT的SSE优化,而在于使用FFT实现快速卷积的相关技巧和过程. 关于FFT变换,有很多参考的代码,特别是对于长度为2的整数次幂的序列,实现起来也是非常简易的,而对于非2次幂的序列 ...

  4. OpenCL 图像卷积 3 使用 CPU

    ▶ CPU 图像卷积,共四种方法.分别为基本串行,使用模板,使用局部内存,使用AVX指令优化 ● 全部的代码,仅在主函数中选择调用的函数名即可. #include <stdio.h> #i ...

  5. OpenCL 图像卷积 2

    ▶ 上一篇图像卷积 http://www.cnblogs.com/cuancuancuanhao/p/8535569.html.这篇使用了 OpenCV 从文件读取彩色的 jpeg 图像,进行边缘检测 ...

  6. 学习 opencv---(12)OpenCV 图像金字塔:高斯金字塔,拉普拉斯金字塔与图片尺寸缩放

    在这篇文章里,我们一起学习下 图像金字塔 的一些基本概念,如何使用OpenCV函数pyrUp和pyrDown 对图像进行向上和向下采样,以及了解专门用于缩放图像尺寸的resize函数的用法.此博文一共 ...

  7. OpenCV图像金字塔

    图像金字塔 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 pyrUp 和 pyrDown 对图像进行向上和向下采样. 原理 Note 以下内容来自于Bradski和Kaehler的大作:  ...

  8. 图像卷积、相关以及在MATLAB中的操作

    图像卷积.相关以及在MATLAB中的操作 2016年7月11日 20:34:35, By ChrisZZ 区分卷积和相关 图像处理中常常需要用一个滤波器做空间滤波操作.空间滤波操作有时候也被叫做卷积滤 ...

  9. Opencv 图像叠加 添加水印

    Opencv 图像叠加 添加水印 C++: void Mat::copyTo(OutputArray m) const C++: void Mat::copyTo(OutputArray m, Inp ...

  10. OpenCV 图像特效

    1.RGB ->灰度 #灰度 方式1 img=cv2.imread('b.png',0) img1=cv2.imread('b.png',1) height=img1.shape[0] widt ...

随机推荐

  1. Ubuntu下vsc+python3配置

    我发现直接搜这个很容易得到过时的文章py2请滚蛋好么 1.首先下去VSC官网下载.deb的安装包,安装好vsc,打开后安装PYTHON,reload下.别啊忘记修改路径,setting下搜python ...

  2. ASP.NET MVC模型绑定1

    一.模型绑定原理 模型绑定是指为Controller的Action方法的参数提供值的过程,例如我有一个名为Blog的实体类(准确的说是ViewModel),它有一个名为Title的属性,如果我在VIE ...

  3. 导入org.apache.poi.xssf 读取excel

    POI 操作 excel  用XSSF 方式时,如果不能自动导入 org.apache.poi.xssf 对应jar 包,则可以Apache 官网进行下载,自行导入. step1: 访问 http:/ ...

  4. 面试官所问的--Token认证

    写这一篇文章的来源是因为某一天的我被面试官提问:让你设计一个登录页面,你会如何设计? 我当时的脑子只有??? 不就是提交账号.密码给后台就搞定了呢? 不可能那么简单,我弱弱的想,难道要对密码加密?? ...

  5. django 外键使用select html

    1.HTML代码: <td> <select id="depend_case" name="depend_case"> <opti ...

  6. DoS攻击种类

    DoS攻击有许多种类,主要有Land攻击.死亡之ping.泪滴.Smurf攻击及SYN洪水等. 据统计,在所有黑客攻击事件中,syn洪水攻击是最常见又最容易被利用的一种DoS攻击手法. 1.攻击原理 ...

  7. 【模板】裸SPFA

    SPFA可以处理带负边权的图,可以判负环,然而SPFA容易被卡,即使加了各种优化. 队列优化的贝尔福德曼:裸SPFA //SPFA #include<bits/stdc++.h> usin ...

  8. C++/CLI剪辑

    1.本地类中包含托管类成员变量的情况 #include<vcclr.h> // 必须包含vcclr.h头文件 //传入 A^ a = gcnew A(); gcroot<A^> ...

  9. css各类选择器类型和用法

    1.ID 选择器(ID selector,IS):使用 # 标识selector,语法格式:#S{...}(S为选择器名).例:id为name的标签会匹配下面的样式 <style> #na ...

  10. 小匠第一周期打卡笔记-Task01

    一.线性回归 知识点记录 线性回归输出是一个连续值,因此适用于回归问题.如预测房屋价格.气温.销售额等连续值的问题.是单层神经网络. 线性判别模型 判别模型 性质:建模预测变量和观测变量之间的关系,亦 ...