Opencv 计算CVI积分后的奇怪图像?

Opencv 计算CVI积分后的奇怪图像?,opencv,Opencv,我试图理解cvIntegral的用法。输出图像的行为是否与附加的图像相同?是的,当手动计算时,左上部分的值确实很小(黑色),当它转到右下部分时(更亮)。如果没有标准化(0-255),图像将完全为白色,然后是一些黑色 原始图像 积分图像规格化实际上,它取决于要计算的积分类型,因为有三种类型-从: 该函数计算源的一个或多个整数图像 图片如下: 如果你说的是第一种积分,那么这就是矩形中所有像素的总和。我的积分图像输出如下: 逻辑上似乎是正确的 通过标准化(255/max),我可以看到与输出相

我试图理解cvIntegral的用法。输出图像的行为是否与附加的图像相同?是的,当手动计算时,左上部分的值确实很小(黑色),当它转到右下部分时(更亮)。如果没有标准化(0-255),图像将完全为白色,然后是一些黑色

原始图像


积分图像规格化

实际上,它取决于要计算的积分类型,因为有三种类型-从:

该函数计算源的一个或多个整数图像 图片如下:

如果你说的是第一种积分,那么这就是矩形中所有像素的总和。我的积分图像输出如下:

逻辑上似乎是正确的

通过标准化(
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();

我没有得到你的输出。我知道它实际上是如何工作的。只是想澄清一下我得到的结果是否有问题;cvConvertScale(积分img,积分img1,255.0/max_val,0);因此,基本上你得到的图像与我从函数
imwrite
得到的图像相同-是的。我觉得规格化输出在测试后与你的略有不同。我正在使用旧的opecv api。