c++ - 当我使用opencv函数cvNorm(image,NULL,CV_L2)时,返回异常结果,为什么?

标签 c++ matlab image-processing opencv

这是opencv代码:

int main()  
{  
IplImage* image=cvLoadImage("C:\\boat.png",CV_LOAD_IMAGE_GRAYSCALE);

cout<<"1-norm is : "<<cvNorm(image,NULL,CV_L1)<<endl;  

cout<<"2-norm is : "<<cvNorm(image,NULL,CV_L2)<<endl;  //the result is 6000+,it's too
big and unnormal!

return 0;
}

l2 范数结果很大,有 6000+,而 matlab 答案是 229,如下所示,

这是matlab代码:

>> norm(image)

ans =

229.7975

为什么?

最佳答案

相反,灰度图像的 6000+ 范数看起来很正常。灰度图像值的范围从 0 到 255,因此根据图像的大小,即使对于小至 64x64 的图像,您也可能得到 L2=sqrt(sum(image.^2))(不是实际代码)以数千、数万或更多为单位。

更有趣的是为什么 Matlab 中的 norm(image) 这么低。 norm 不接受 uint8 vector ,因此在加载图像和计算其范数之间的某处存在数据转换,它也可能具有改变图像绝对值的副作用,并且随后成为常态。

关于c++ - 当我使用opencv函数cvNorm(image,NULL,CV_L2)时,返回异常结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523502/

相关文章:

c++ - 在命名管道和套接字之间进行简单切换的 IPC

matlab - 约束高阶多项式回归

python - 如何将颜色强度值映射到其名称?

java - 如何将 16 位灰度图像写为 jpeg?

c++ - 为什么当输入是整数变量中的字符串时输出 4196208?

c++ - 为什么我应该避免在 C++ 中使用 malloc?

c++ - 在未初始化局部变量的情况下,Windows 线程堆栈保护页面机制如何工作?

c++ - 使用 Matlab R2011a 在 Ubuntu 11.04 上编译 Matlab mex 文件时出错

matlab - 修复图例在 MATLAB 中的位置

c# - 计算图像中唯一颜色数量的算法