吃完晚饭到现在,一直在debug一个问题。就是在用cvFindContours()的时候找的边缘不正确。我的这段代码是从以前的代码中copy过来的,应该没有问题。但是我的程序里有两部分用到这段代码,一处contours找的正确,一处找的不对,而且出错的结果让人想不到是哪里出了问题。因为代码是一样的,按理说是不应该错呀。就这样6个小时过去了,郁闷个半死,最后才发现是第2处读入的图像不在是二值图像了,虽然我保存时是二值图像。多亏有了Adobe photoshop,我可以查图像里每个象素的RGB值,这才发现了问题。
最后的结论是:把二值图像使用JPG格式保存时,由于JPG是有损压缩编码,虽然视觉上看不出什么问题,但是保存后的图像已经不再试二值图像了,最终导致cvFindContours()没能找对边缘。对策就是把图像保存成BMP格式。至此,终于迈出了第一步。