opencv实战从0到N (8)—— 积分图求解

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

opencv实战从0到N (8)—— 积分图求解

求积分图及任意区域像素和

1,积分图就是图像上一点(x,y)的左上面积之和,利用积分图可以对图像中的任意矩形区域,

利用其四个点的积分值的加减运算即可求出此区域的像素之和,对于图像需要求和的特征可以加快运算速度,

只需计算一次积分图,后续即可使用查询(结合加减运算)的方式获得特征值。

2,函数:integral(image, imageIntegral, CV_32F);

计算任意区域的像素和:

float integra_rect(Mat& image,int x1,int y1,int x2,int y2)

{

float dst_val = image.at<float>(x2,y2)+ image.at<float>(x1, y1) - image.at<float>(x1, y2) - image.at<float>(x2, y1);

return dst_val;

}

3,测试:


void main()

{

Mat src = imread("2.jpg");

Mat image;

cvtColor(src, image, CV_RGB2GRAY); //原图像是三通道,积分图也是三通道

Mat imageIntegral;

integral(image, imageIntegral, CV_32F); //计算积分图

normalize(imageIntegral, imageIntegral, 0, 255, CV_MINMAX); //归一化,方便显示

Mat imageIntegralNorm;

convertScaleAbs(imageIntegral, imageIntegralNorm); //精度转换为8位int整型



imshow("src", image);

imshow("dst", imageIntegralNorm);

cvWaitKey(0);



}

更多内容关注微信公众号:ML_Study

猜你喜欢

转载自blog.csdn.net/qq_34106574/article/details/93773403