当我使用opencv函数cvNorm(image,NULL,CV_L2)时,返回异常结果,为啥?
Posted
技术标签:
【中文标题】当我使用opencv函数cvNorm(image,NULL,CV_L2)时,返回异常结果,为啥?【英文标题】:When I use the opencv function cvNorm(image,NULL,CV_L2),it returns an abnormal result,why?当我使用opencv函数cvNorm(image,NULL,CV_L2)时,返回异常结果,为什么? 【发布时间】:2012-09-21 02:33:09 【问题描述】:这是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
为什么?
【问题讨论】:
【参考方案1】:相反,灰度图像的 6000+ 标准看起来很正常。灰度图像值范围从 0 到 255,因此根据图像的大小,即使对于小到 64x64 的图像,您可能会得到数千、数万或更多的L2=sqrt(sum(image.^2))
(不是实际代码)。
更有趣的是为什么 Matlab 中的norm(image)
如此之低。 norm
不接受 uint8
向量,因此在加载图像和计算其范数之间的某处存在数据转换,这也可能具有改变图像中的绝对值和随后的范数的副作用。
【讨论】:
THX!我在matlab中使用过im2double(image),所以image的取值范围是0到1。以上是关于当我使用opencv函数cvNorm(image,NULL,CV_L2)时,返回异常结果,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用函数 matchTemplate 的 OpenCV 错误