• Open Source Computer Vision Library

《OpenCV教程——基础篇》勘误

Wikipedia,自由的百科全书

目录

24页 倒数第2行 文字错误

“文框框”改为 “文本框”

26页 第1行 文字错误

cvd.lib cxcored.lib highguid.lib cvcamd.lib 都多了一个d

User:lifudan123提交

29页 第10行 文字错误

“单击InitInstance()”改为 “双击InitInstance()”

29页 倒数第1行 文字错误

"MyApplication.h"应该改为:"mymfc.h"


30页 第10行 文字错误

原文:“在CVB中右击MyIplClass,增加公共成员函数……”

应改为:在CVB中右击MyIplClass,增加公共成员变量……”

  • [[User:feixiaolin|feixiaolin]添加


30页 倒数第5行 文字错误

“MyIplClas()”应改为:“MyIplClass()”

31页 倒数第1行 文字错误

“ID_MYMFC_DIALOG”应该为:“IDD_MYMFC_DIALOG”

33页 倒数第1行 程序不能运行

33页程序不能运行,在倒数第一行与倒数第二行之间插入一行:“cvSetImageCOI(img,0); //此句为添写语句,课本中没有,补充之”,然后程序就可以正常运行了

32页 中间代码部分第7行 程序不能运行

MyIplClass *Img = new MyIplClass; 应为:MyIplClass *Img = new MyIplClass();

64页 第10行 文字错误

原文:“vRect cvGetImageROI(const IplImage* image);”

应改为:“CvRect cvGetImageROI(const IplImage* image);”

64页 倒数一行 缺少参数

原文:"img = cvLoadImage(argv[1]);"

应该改为:"img = cvLoadImage(argv[1] , -1);"

69页 第22行 文字错误

原文:“对通道单字节图像可采用以下语句访问。”

应改为:对通道单字节图像可采用以下语句访问。


70页 倒数第10行 文字错误

原文:“线粗为1的红色矩形”

应改为:线粗为1的蓝色矩形

//在第一版中没有这个错误


98页 中间 文字错误

原文:“(16) Mat”

应改为:(16) cvMat

//在第一版中没有这个错误

(从第92页开始到第404页,所有被介绍函数的题头都要加上cv)

107页

文字错误
在(8)GetElemType 的说明中,列举了返回类型,其中CV_32FO4应改为CV_F32C4。

237页

CvErrorCallback定义中少了一个userdata参数.

更正:

<c>typedef int (CV_CDECL *CvErrorCallback)( int status, const char* func_name,

                     const char* err_msg, const char* file_name, int line, void* userdata );</c>

133页 “CV_REDUCE_AVG 输出是矩阵所有行(或列)的中值”中值表述不准确,输出的是平均值

更正为:

<c> CV_REDUCE_AVG 输出是矩阵所有行(或列)的均值 </c>

218页 例4-5函数名cvGetHashedNode使用错误

cxcore头文件中没有这个函数,更正为cvGetHashedKey

同时还有个小错误就是cvOpenFileStorage打开的文件跟例子里的文件名不符,实际文件名后缀yaml


231页

倒数3-4行代码cvGetSeqElem参数使用错误: <c>for(i = 0; i < labels->total; i++) { CvPoint pt= *(CvPoint*)cvGetSeqElem(point_seq, i, 0); // cvGetSeqElem只有2个参数 CvScalar color = colors[*(int*)cvGetSeqElem(labels, i, 0)]; // 同上 cvCircle(canvas, pt, 1, color, -1); }</c>

316页 8行

CV_HOUGH_STANDARD对于两个结果参数的描述不够准确。

317页

代码的 if(fabs(a)<0.001) 与else if(fabs(b)<0.001) 中的a,b互换,结果才对,所以推测,cvHoughLines2(标准)的结果描述有问题。


361页

例5-20中,程序的最后没有释放捕捉源。应在return 0;语句前,添加cvReleaseCapture(&pCapture);语句。

我觉得317页if语句中的a ,b参数没有问题,前面之处错误的同志在仔细看看

428页

例 5-2 与 例 5-3 内容内容与索引交叉

  • [feixiaolin|feixiaolin] 添加

300页

对输入图像的亮度进行调节,示例中给出的是对单通道图像的调节,而程序附带的是3通道图像,结果是,运行程序的话, result窗口中只对图像的左侧1/3部分进行了调节,右侧2/3没有变化。因此,应当在两个for循环语句内添加判断对图像的nChannels进行判断, 然后依次对各个通道的数据进行处理。 以下是对于常见的3通道情况://有一个小建议,希望在程序里直接加载工程文件下的图片,使调试运行时直接就可以打开图片,而不必每次在命令行里输入参数

   val0 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels]; 
           val0 = pow((val0 - low2)/err_in, gamma) * err_out + bottom2;
           if(val0>255) val0=255; if(val0<0) val0=0; // Make sure src is in the range [low,high]
        	(dst->imageData+dst->widthStep*y)[x*dst->nChannels+0]=val0;

val1 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels+1];

           val1 = pow((val1 - low2)/err_in, gamma) * err_out + bottom2;
           if(val1>255) val1=255; if(val1<0) val1=0; // Make sure src is in the range [low,high]
        	(dst->imageData+dst->widthStep*y)[x*dst->nChannels+1]=val1;

val2 = ((uchar*)(src->imageData + src->widthStep*y))[x*src->nChannels+2];

           val2 = pow((val2 - low2)/err_in, gamma) * err_out + bottom2;
           if(val2>255) val2=255; if(val2<0) val2=0; // Make sure src is in the range [low,high]
        	(dst->imageData+dst->widthStep*y)[x*dst->nChannels+2]=val2;

--Leileiecho 15:59 2010年1月13日 (CST)


359页

例5-20,利用背景建模检测运动物体。 1 程序附带video.avi无法识别,需要格式转换。

2 运行源代码,会发现pBkImg,pFrImg图像是上下颠倒的。需要分别在“//二值化前景图 cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY);”后加上

“pFrImg->origin=pFrame->origin;”在“cvConvert(pBkMat, pBkImg);”加上“ pBkImg->origin=pFrame->origin;”以纠正图像原点。

3 注释掉的语句中的 cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0);,去掉注释符运行会提示该命令少参数,参数末尾需添加默认值0。

--Leileiecho 11:34 2010年1月16日 (CST)

366页

例5.21运动模板检测源程序第366页第5行,中for循环的循环变量i应当从-1开始,以实现对整幅图像的运动检测,书中写的是0。

 for (i=-1;i<seq->total;i++)

--Leileiecho 14:52 2010年1月20日 (CST)

82页

cvcamSetProperty(0,CVCAM_PROP_RNDWIDTH,&width);应该是cvcamSetProperty(0,CVCAM_RNDWIDTH,&width);


208页

XML 文档内容: <?xml version="1.0"> 应更改<?xml version="1.0"?>

426页

倒数第12行:myfgdetector.cpp应为:myfgdetector.h

61页

(1)鼠标时间 - 应为"鼠标事件"

111页

倒数11行: (1) Copy - 应为 (1)cvCopy

29页

倒数3行:"MyIplClass.ccp"- 应改为"MyIplClass.cpp"

80页

例3—6 第一行与第二行之间加入: (井号#,这里显示不对)include"highgui.h" 否则编译链接报错

107页

倒数第4行:int dims=cvGetDims(arr,size); -应为int dims=cvGetDims(arr,sizes);

106页

倒数第11行:double sum; -应改为:double sum=0.0;

107页

在sum+=val;与printf("\nTotal sum=%g\n",sum);两行之间加入一个“}”。

115页

倒数第12行:dst(i,j)=src[i,cols(src1)-j-1](filp_mode>0) -应该为dst(i,j)=src[i,cols(src)-j-1](filp_mode>0)

120页

第4行:“函数cvAddS将某数值与输入数组src1的每个元素相加” -应该为“函数cvAddS将某数值与输入数组src的每个元素相加”

124页

第13行:"src1 输入数组" -应改为"src 输入数组"

125页

倒数第7行:"src1 输入数组" -应改为"src 输入数组"

126页

倒数第3~8行:所有的src1(i)均应改为src(i)

127页

这页中部出现的两个“oxff”,均应改为“0(数字0)xff”

154页

倒数第14行:((float *)cvPtr2D(...)=... -应改为:*(float *)cvPtr2D(...)=...

155页

倒数第8行:x=(1/N)*x -应改为:x=(1/N)*x'

156页

示例第3行:...only abs(M2-M1)+1*abs(N2-N1)+1 -应改为:...only (abs(M2-M1)+1)*(abs(N2-N1)+1)

166页

倒数第19行:函数cvMemStorageAlloString... -应改为:函数cvMemStorageAllocString...

204页

倒数第4行主函数的返回值类型改为void,或在第205页程序倒数第三行加上return 0;

218页

程序例4—5的int main(int argc,char **argv)的上面应加入# include<stdio.h>,否则编译链接出错

247页

程序例5—1的倒数第2行和倒数第3行之间要插入一句cvReleaseImage(&cedge),否则此内存空间无法释放。

248页

第14行:cvSubS(corner,...) -应改为:cvSub(corner,...)

282页

主函数下面第二行:char *filename=...(char *)"rice.tif" - 应改为:char *filename=...(char *)"rice.png"

284页

倒数第3行:cvDestroyWindow("test") - 应改为:cvDestroyWindow("image")

285页

mask这个窗口在主函数最后不一定被释放,应在主函数最后,return 1;之前加一句: if(is_mask) cvDestroyWindow("mask");

300页

本页中间有一个if判断语句,其中有8个且运算,这些且(&&)运算均应改为或(||)运算。

311页

在程序的最后两个花括号之间要加入一句return 0;,否则主函数没有返回值。

Views
Personal tools