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

UI设计界面 UI设计界面 主题:1059 回复:2190

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

归属感 发布于 2017-02-09 字数 397 浏览 953 回复 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;
}

发布评论

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

支持 Markdown 语法,需要帮助?

评论(2

清晨说ぺ晚安 2017-10-27 2 楼

当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 1 楼

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