OpenCV4 积分图像
OpenCV4 积分图像
这周是考试周,再加上有挺多课外知识需要输入,就去繁从简,写一写
OpenCV4积分图像
吧。
文章目录
- OpenCV4 积分图像
- 一、编程环境:
- 二、原理介绍:
- 三、简易效果展示:
一、编程环境:
操作系统 | Windows 10 x64 家庭中文版 |
IDE | Visual Studio 2019 |
OpenCV | 4.5.2 |
二、原理介绍:
在没有积分图像之前,计算一幅图像中多个区域的像素平均灰度值,需要遍历各个区域的像素点,分别对像素灰度值进行累加并求平均,这样的操作给人一种数学上的舒适感,但是当所求的多个区域互相重叠时,就会出现重复计算重叠区域数值的情况,当区域数量很多时,就会带来时间上的复杂度。因此,积分图像应运而生,它的出现使得重复区域的像素灰度值只需要计算一次。
积分图像的尺寸比原图像大1,因此,将积分图像中每个像素点所在的位置向左、向上各移动一个单位,就对应其在原图像中的位置。要求解积分图像中每个像素的像素值,需要由原图像对应位置向 x、y 轴分别作垂线,两垂线与 x、y 轴所围成的矩形中所有像素值的和即为积分图像中对应像素的像素值。
为什么说“积分图像的出现可以使重复区域的像素灰度值只需计算一次呢”?
设想一下:现在图像处理要求先计算图像中前5行和前5列相交区域的像素平均灰度值,再计算图像中前7行和前7列相交区域的像素平均灰度值。如果不使用积分图像,那么我们需要分别对像素灰度值进行累加并求平均,但在该计算过程中,前5行和前5列相交区域的像素灰度值重复计算;而如果我们使用积分图像且用 P(5,5) 表示前5行和前5列相交区域的像素灰度值之和,那么我们仅需要先用 P(5,5) 除以 25,再用 P‘(7,7) 除以 49 即可,又由于获得积分图像时需要进行一次累加,故积分图像可以只计算一次像素灰度值。
在
OpenCV4
中,根据积分图像计算规则的不同,分为3种主要的积分图像,分别是标准求和积分图像、平方求和积分图像和倾斜求和积分图像。顾名思义,标准求和积分图像和平方求和积分图像分别计算像素点两垂线与两坐标轴之间矩形内每个像素值之和以及每个像素值平方之和,而倾斜求和积分图像仅仅是在前两者的基础之上,将求和方向旋转45°。在OpenCV4
中intergral()
函数能够同时求解以上三种积分图像,其代码框架及解释如下:void cv::integral(InputArray src, //输入图像或数组矩阵,数据类型可以是CV_8U、CV_32F或CV_64FOutputArray sum, //输出标准求和积分图像,数据类型可以是CV_32S、CV_32F或CV_64FOutputArray sqsum, //输出平方求和积分图像,数据类型可以是CV_32F或CV_64FOutputArray tilted, //输出倾斜45°的倾斜求和积分图像,数据类型与sum相同int sdepth = -1, //输出标准求和积分图像和倾斜求和积分图像的数据类型标志,默认值-1表示自适应int sqdepth = -1 //输出平方求和积分图像的数据类型标志,默认值-1表示自适应)
最后贴上我根据教材中代码在自己的类源文件中的函数实现,较为简单,在此处不作介绍:
//8-15 计算积分图像 int myCVLearning::my_integral() {//创建一个16*16且像素值全为1的矩阵Mat img = Mat::ones(16, 16, CV_32FC1);//在图像中加入随机噪声RNG rng(10086);for (int y = 0; y < img.rows; y++){for (int x = 0; x < img.cols; x++){float d = rng.uniform(-0.5, 0.5);img.at<float>(y, x) = img.at<float>(y, x) + d;}}//计算标准求和积分Mat sum;integral(img, sum);//为了便于显示,转成CV_8U格式Mat sum8U = Mat_<uchar>(sum);//计算平方求和积分Mat sqsum;integral(img, sum, sqsum);//为了便于显示,转成CV_8U格式Mat sqsum8U = Mat_<uchar>(sqsum);//计算倾斜求和积分Mat tilted;integral(img, sum, sqsum, tilted);//为了便于显示,转成CV_8U格式Mat tilted8U = Mat_<uchar>(tilted);namedWindow("标准求和积分", WINDOW_NORMAL);namedWindow("平方求和积分", WINDOW_NORMAL);namedWindow("倾斜求和积分", WINDOW_NORMAL);imshow("标准求和积分", sum8U);imshow("平方求和积分", sqsum8U);imshow("倾斜求和积分", tilted8U); }
三、简易效果展示:
作者还处于
OpenCV4
基础知识的学习过程中,因此未能对知识进行应用,还请各位大佬谅解!作者一定会发奋图强滴哈哈。
参考文献:《OpenCV 4 快速入门》
OpenCV4 积分图像相关推荐
- 用OpenCV4实现图像的超分别率
用OpenCV4实现图像的超分别率 本实验原文链接: https://arxiv.org/pdf/1807.06779.pdf 原文摘要 单图像超分辨率(SISR)的主要挑战是如何恢复微小纹理等高频细 ...
- 【opencv系列08】OpenCV4.X图像融合操作
点击上方"AI搞事情"关注我们 图像叠加 add(src1, src2, dst=None, mask=None, dtype=None)函数或者numpy操作实现图像按位相加,若 ...
- 【opencv系列07】OpenCV4.X图像基本操作
点击上方"AI搞事情"关注我们 一.像素操作 可以通过行列坐标访问像素值,对于BGR图,返回一个蓝色.绿色.红色通道的数组值,对于灰度图,仅返回相应的强度值. 代码 import ...
- 积分图像(Integral image)
1 问题起源 给定一幅灰度图像,其灰度值如下图所示, 要计算图中深色区域的所有像素点的灰度值之和. 最直接,简单的方法就是将这9个像素值直接相加. 如果深色区域扩大,里面包含成千上万个像素,这种算法的 ...
- delphi 生成 超大量xml_用OpenCV4实现图像的超分别率
用OpenCV4实现图像的超分别率 本实验原文链接:· f="https://arxiv.org/pdf/1807.06779.pdf">https://arxiv.org/ ...
- 积分图像追踪目标 (一)
积分 积分是微积分学与数学分析里的一个核心概念.通常分为定积分和不定积分两种.对于一个给定的正实值函数,在一个实数区间上的定积分可以理解为在坐标平面上,由曲线.直线以及轴围成的曲边梯形的面积值(一种确 ...
- 【图像特征提取1】方向梯度直方图HOG---从理论到实践------附带积分图像的解析
(一)特征检测算法的综述 计算机视觉理论中的特征描述是常见的目标分析技术之一,关键点的检测和关键点的提取是目标分析的重要手段和重要步骤之一.局部图像特征描述的核心问题是不变性和可分析性,不变性是基于特 ...
- OpenCV—积分图像
前言: 有时候只需要计算图像中某个特定区域的直方图.实际上累计图像的某个子区域内的像素总和,是很多计算机视觉算法中常见的过程.现在假设需要对图像中的多个兴趣区域计算几个此类直方图.这些计算过程都马上会 ...
- NLM-P (使用积分图像进行算法的优化)
#include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; ...
最新文章
- arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】
- js如何写html中的内容,javascript怎样获取某个标签的内容?
- 自动驾驶的一些专业术语
- 容器源码解析之LinkedHashSet(六)
- raft算法与paxos算法相比有什么优势,使用场景有什么差异?
- 微软 Azure App Service 漏洞 NotLegit已存在4年,客户源代码被暴露
- 大数据如何应用于食品追溯管理
- 【网络】为什么我执行了发布操作,但是线上的资源并没有更新?
- Exchange 2016 CU3 安装失败解决方法
- h5扫描pc端二维码登录
- 【ADNI】数据预处理(3)CNNs
- 12.PS-渐变工具组
- Postgresql计算月天数
- 如何在线批量将Word转换为PDF格式
- Web大学生网页作业成品——个人班级网站设计与实现(HTML+CSS)
- 【Prometheus】PrometheusGrafana 监控
- Word/WPS 利用邮件合并批量生成文档
- 蓝桥杯省赛 走方格(多种方法)
- 导入Excel至数据库中 quot;外部表不是预期格式quot;错误信息
- 怎样循序渐进、有效地学习JavaScript?