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