一、55页表 3-12中第一行,第四列的内容:“第五位”。我觉得应该是“第四位”
二、原书第176页第8行,“element代表膨胀操作所采用的结构类型......”中的“element”应该为“kernel”。
因为前几页提到腐蚀操作的参数也是“kernel”,加上本膨胀函数里也并没有“element”这个参数量。
三、本书的第213页,倒数第二行的“
edges=cv.Canny(image,thresold......)
应为
edges=cv2.Canny(image,thresold......)
从书的开始调用opencv库便用"cv2.",此处却”cv.“,所以改成“cv2.”更严谨。
四、原书第12章例12.10,即第253页的“使用函数cv2.matchShape()计算三副不同图像的匹配度”,在例子的输出中出现了254页图12-15的三副原始图像,但是原书程序代码中并未出现cv2.imshow()及其他输出图像的函数语句。
原文(253页倒数第四行):“运行上述程序,会显示三幅原始图像,如图12-15所示”。除此外输出正常,会出现原始图像的shape属性及图像对比度。
五、第12章图像轮廓的12.4.5,即261页表12-2解释“distType”参数含义的表;表中的第6行右侧,“distance=2(sqrt(1+x*x/2)-1))”应改为“distance=2(sqrt(1+x*x/2)-1)”。即后边多了个括号“)”
六、原书第262页,12.4.6最小外包三角形的例12.18“使用函数cv2.minEnclosingTriangle()构造最小外包三角形”中使用到函数cv2.line()。由于cv2.line()中的参数pt1,pt2要求不能是浮点数,所以按照一般灰度图像套用此例子的代码会报错(本人使用的python编译环境是pycharm),报错提示如下:
cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'line'
> Overload resolution failed:
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
易知,报错原因出现在cv2.line()函数的参数"pt1"和"pt2"的类型上。
解决办法:将原书中的代码:
for i in range(0,3):
cv2.line(o,tuple(trgl[i][0]),
tuple(trgl[(i+1)%3][0]),(255,255,255),2)
改为
for i in range(0,3):
cv2.line(o,tuple((trgl[i][0]).astype(int)),
tuple((trgl[(i+1)%3][0]).astype(int)),(255,255,255),2)
即通过astype函数强制转换为int类型。