使用opencv resize方法替代PIL resize方法的一个小发现

it2024-01-04  94

项目场景:

最近在做一个纸页表格电子化处理的项目,需要在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替代后,至少可以基本实现这个目标。在此记录一下,希望可以帮助同样有此烦恼的兄弟们~
最新回复(0)