《OpenCV教程——基础篇》勘误
Wikipedia,自由的百科全书
24页 倒数第2行 文字错误
“文框框”改为 “文本框”
29页 第10行 文字错误
“单击InitInstance()”改为 “双击InitInstance()”
29页 倒数第1行 文字错误
"MyApplication.h"应该改为:"mymfc.h"
30页 第10行 文字错误
原文:“在CVB中右击MyIplClass,增加公共成员函数……”
应改为:在CVB中右击MyIplClass,增加公共成员变量……”
- [[User:feixiaolin|feixiaolin]添加
30页 倒数第5行 文字错误
“MyIpClas()”应改为:“MyIpClass()”
31页 倒数第1行 文字错误
“ID_MYMFC_DIALOG”应该为:“IDD_MYMFC_DIALOG”
33页 倒数第1行 程序不能运行
33页程序不能运行,在倒数第一行与倒数第二行之间插入一行:“cvSetImageCOI(img,0); //此句为添写语句,课本中没有,补充之”,然后程序就可以正常运行了
64页 第10行 文字错误
原文:“vRect cvGetImageROI(const IplImage* image);”
应改为:“CvRect cvGetImageROI(const IplImage* image);”
69页 第22行 文字错误
原文:“对多通道单字节图像可采用以下语句访问。”
应改为:对单通道单字节图像可采用以下语句访问。
70页 倒数第10行 文字错误
原文:“线粗为1的红色矩形”
应改为:线粗为1的蓝色矩形
- tyfbyfby提交
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>
- chai2010 提交
133页 “CV_REDUCE_AVG 输出是矩阵所有行(或列)的中值”中值表述不准确,输出的是平均值
更正为:
<c> CV_REDUCE_AVG 输出是矩阵所有行(或列)的均值 </c>
- tongtong 提交
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>
- chai2010 提交
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);语句。
- 306提交
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)


