当我使用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 错误

opencv中的cv2.namedWindow()函数使用

OpenCV - remap() - 获取黑色像素

在opencv中的imshow函数后插入延迟

如何在 OpenCV C++ 中使用 warpAffine 函数

无法使用 opencv2.3 imread 读取图像