这是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/