C++-openCv中用cvNorm算灰度图像的l2范数有问题

发布于 2017-02-09 14:15:47 字数 379 浏览 1201 评论 2

代码如下:

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; //居然等于6000+,太大了,不正常啊

return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-10-27 23:15:34

当p取1,2,∞的时候分别是以下几种最简单的情形:
  1-范数:║x║1=│x1│+│x2│+…+│xn│
  2-范数:║x║2=(│x1│^2+│x2│^2+…+│xn│^2)^1/2
  ∞-范数:║x║∞=max(│x1│,│x2│,…,│xn│)
  其中2-范数就是通常意义下的距离。

matlab的:norm()默认使用的是2范数。
opencv的:double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL,
int norm_type=CV_L2, const CvArr* mask=NULL );当arr2不为空,且norm_type=CV_L2时,norm = ||arr1-arr2||L2 = sqrt( sumI (arr1(I)-arr2(I))2 )

我错了,答案是没有问题的,opencv中读入的图像的像素值范围为0-255,matlab中因为我用了im2double(),把像素值范围转换到了0-1,所以两者答案都没问题,粗心啊,以后的多加注意!

浮生未歇 2017-08-09 10:32:20

OpenCV中CV_L1指的是一般长度计算,CV_L2指的是欧几里得长度,matlab中norm得出的是像素矩阵的范数,这两个应该不是同一个值吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文