Python 使用OpenCV实现积分图

一.积分图实现注意的点

积分图的原理就不解释了,这次主要实现通过Python使用OpenCV模块来完成积分图。看了网上的一些积分图实现,python语言的实现效果不是很好,参考了一篇C++的积分图实现,了解了积分图像的输出数组的尺寸为必须为(w +1)x(h+1),不能是wxh,这是第一点。第二点就是归一化时重新建一个result数组作为保存。否则可能会有一些内存的问题,积分图只有白色。第三点是图像的类型要和后面的数据类型相对应,是灰度图像就要用对应的数据类型,具体看参考文献[3]的解释。

二.代码实现
import cv2
import numpy as np

filename = 'D:/Car_Identify/papers_for_edge/sobel_ver.jpg'
image = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
# print(image)
cv2.imshow('origin', image)

h, w = image.shape[:2]  # 把图片2像素的行数,列数以及通道数返回给rows,cols,channels
sum = np.zeros((h + 1, w + 1), dtype=np.float32)  # 创建指定大小的数组,数组元素以 0 来填充:
imageIntegral = cv2.integral(image, sum, cv2.CV_32FC1)  # 计算积分图,输出是sum
result = np.zeros((h + 1, w + 1), dtype=np.uint8)
cv2.normalize(imageIntegral, result, 0, 255, cv2.NORM_MINMAX, cv2.CV_8UC1)  # 归一化处理
cv2.imshow("Image", result)
cv2.imwrite("D:/Car_Identify/papers_for_edge/integral_result.jpg", result)![在这里插入图片描述](https://img-blog.csdnimg.cn/20190606180108399.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExNTIwNjA4NzAxMw==,size_16,color_FFFFFF,t_70)
cv2.waitKey()

备注: np.uint8 指unsigned int 8位数
cv2.CV_8UC1 指 unsigned 8位数,单通道
cv2.CV_32FC1 指 float 32位数,单通道

三.实现结果

原图
在这里插入图片描述
积分图
在这里插入图片描述

四.参考文献

[1]https://blog.csdn.net/xueying_key/article/details/86411806
[2]https://blog.csdn.net/qq_27396861/article/details/88377812
[3]https://blog.csdn.net/lisarer/article/details/80415600

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值