我正在尝试了解cvIntegral的使用。输出图像的行为是否与附加的图像相似?是的,当手动计算时,左上部确实具有小值(黑色)并且当它向右下方(更亮)时。没有标准化(0-255),图像完全是白色,然后是黑色。
原始图片
积分图像标准化
答案 0 :(得分:0)
实际上,这取决于你想要计算的积分类型,因为它有三种类型 - 来自documentation:
该函数计算源的一个或多个整数图像 图片如下:
如果你谈论第一类积分,那么它只是矩形[(0,0),(x,y)]
中所有像素的总和。我的积分图像输出是这样的:
什么似乎在逻辑上是正确的。
通过规范化(255/max
),我会看到与输出相同的图像。
<强>更新强>
似乎我得到了你的错误 - imwrite
失去了图像的质量(可能)因为某些积分图像的值太大(大于255),但imshow
显示正常(该图像只是一个)截图)。所以就像你一样使用规范化。这是代码:
Mat src = imread("moon.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat int1, norm;
integral(src, int1);
double max;
minMaxIdx(int1, 0, &max);
int1.convertTo(norm, CV_8UC1, 255/max);
imshow("simple output", int1);//shows normally
imshow("normalized output", norm);
//imwrite("output.jpg", int1);// looses quality
waitKey();