项目场景:
最近在做一个纸页表格电子化处理的项目,需要在c++项目中调用darknet训练的识别模型。调用的方式采用了opencv的dnn模块,调用后,同样需要把phton代码转成c++来实现。
问题描述:
在复现代码的过程中,存在这样的问题: 对于图片的resize,python中使用了PIL.Image中的resize((new_w,new_h), Image.BICUBIC),而Image.BICUBIC的插值方式可以使图像中边缘的变化更明显,对于边缘的检测效果才会达到要求。在尝试用opencv中resize+CV_INTER_CUBIC发现,效果差距很大,无法替代PIL中的方法。
原因分析:
具体原因就不分析了,反正就是两个包中用的插值方法是不同的。
解决方案:
遇到了这个问题后,高手们肯定是直接去看pillow的源码,然后把源码中的功能实现出来就好了。
但作为一名老菜鸡,扣源码是不可能的(不会扣,也扣不动.....),于是本着进行最后挣扎的想法,对opencv中其他的插值方法依次进行了尝试,
最后发现CV_INTER_AREA和PIL中Image.BICUBIC的效果是最为接近的,
不用问我为什么,老菜鸡怎么可能知道这个。但是用CV_INTER_AREA替代后,至少可以基本实现这个目标。在此记录一下,希望可以帮助同样有此烦恼的兄弟们~
转载请注明原文地址: https://lol.8miu.com/read-12984.html