2025年OpenCV——积分图

OpenCV——积分图前言 高等数学和线性代数还是得好好学的 积分图 integral image 积分图像是一种在图像中快速计算矩形区域和 的方法 这种算法的主要优点是一旦积分图像首先被计算出来 我们就可以在常量时间内计算图像中任意大小矩形区域的和 这样在图像模糊 边缘提取 对象检测的时候极大降低计算量 提高计算速度

大家好,我是讯享网,很高兴认识大家。

前言:高等数学和线性代数还是得好好学的.

积分图(integral image)


       积分图像是一种在图像中快速计算矩形区域和的方法,这种算法的主要优点是一旦积分图像首先被计算出来,我们就可以在常量时间内计算图像中任意大小矩形区域的和。这样在图像模糊、边缘提取、对象检测的时候极大降低计算量、提高计算速度。
       积分图中任意一点(x,y)的值等于灰度图的左上角与当前点所围成的矩形区域内所有像素点灰度值之和。(下左图蓝色虚线框部分)

在这里插入图片描述
讯享网

下图是一个例子:

 

积分图计算

在这里插入图片描述

积分图求出任意大小区域

在这里插入图片描述

 

API

积分图函数

在这里插入图片描述

 归一化函数

void cv::normalize(InputArry src, InputOutputArray dst, //输出数组,数组的大小和原数组一致 double alpha=1, //1-用来规范值,2-规范范围,并且是下限 double beta=0, //只用来规范范围并且是上限 int norm_type, //归一化选择的数学公式类型 int dtype=-1, //当为负,输出的宽高通道数都等于输入,                     //当为正,输出只在深度与输入不同,不同的地方由dtype决定 InputArray mark=noArry() //掩码,选择区域,选定后只能对该区域进行操作 );

讯享网

 

代码实现

讯享网#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; int main(int argc, char argv) { Mat src = imread("tahiti.jpg", IMREAD_GRAYSCALE); if (src.empty()) { printf("could not load image...\n"); return -1; } namedWindow("input image", WINDOW_AUTOSIZE); imshow("input image", src); Mat sumii = Mat(src.rows + 1, src.cols + 1, CV_32FC1); //注意要定义长一点内存,否则会溢出编译不通过 Mat sqsumii = Mat::zeros(src.rows + 1, src.cols + 1, CV_64FC1); //64位肯定够 integral(src, sumii, sqsumii); Mat iiResult; normalize(sumii, iiResult, 0, 255, NORM_MINMAX, CV_8UC1, Mat()); imshow("Integral Image", iiResult); waitKey(0); return 0; } 

 

 

小讯
上一篇 2025-03-19 23:15
下一篇 2025-04-01 19:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116381.html