0

我试图了解 cvIntegral 的使用。输出图像的行为是否像附加的图像?是的,当手动计算时,左上部分的值确实很小(黑色),并且随着它进入右下角(更亮)。没有标准化 (0-255),图像是完全白色的,然后是黑色的。

原始图像

原始图像

整体形象

积分图像归一化

4

1 回答 1

0

实际上,这取决于您要计算哪种类型的积分,因为它们分为三种类型 - 来自文档

该函数为源图像计算一个或多个积分图像,如下所示:在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

如果您谈论第一种类型的积分,那么这只是矩形中所有像素的总和[(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();
于 2012-10-27T19:52:51.783 回答