我试图了解 cvIntegral 的使用。输出图像的行为是否像附加的图像?是的,当手动计算时,左上部分的值确实很小(黑色),并且随着它进入右下角(更亮)。没有标准化 (0-255),图像是完全白色的,然后是黑色的。
原始图像
积分图像归一化
我试图了解 cvIntegral 的使用。输出图像的行为是否像附加的图像?是的,当手动计算时,左上部分的值确实很小(黑色),并且随着它进入右下角(更亮)。没有标准化 (0-255),图像是完全白色的,然后是黑色的。
原始图像
积分图像归一化
实际上,这取决于您要计算哪种类型的积分,因为它们分为三种类型 - 来自文档:
该函数为源图像计算一个或多个积分图像,如下所示:
如果您谈论第一种类型的积分,那么这只是矩形中所有像素的总和[(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();