Python中Pillow模块与cpp openCV读取像素点不一致的问题解决

目前再做公司内部前向传播框架的模型转化部分
需要把Python代码的预测逻辑翻译成c++,但是Python那边采用的是Pillow模块读取像素,而cpp这边只有openCV,而且蛋疼的发现这两个框架之间的像素值居然还有一些误差!
参考文章:https://blog.csdn.net/georgeandgeorge/article/details/104716609

根据上文博主的提示,是 底层C库libjpeg版本不一致的问题
现在讲解决办法补充记录如下:

首先是查看cpp openCV的libjpeg库版本
在c++工程内添加如下代码:

std::cout << cv::getBuildInformation() << std::endl;

编译运行即可,我这边显示的是:

JPEG:                        libjpeg-turbo (ver 1.5.3-62)

查看Python中的libjpeg库:
打开终端

Python
>>> import PIL
>>> PIL.__path__

运行结果:

['/home/xxx/anaconda3/lib/python3.7/site-packages/Pillow-7.0.0-py3.7-linux-x86_64.egg/PIL']

参考地址:https://stackoverflow.com/questions/24396727/find-which-libjpeg-is-being-used-by-pil-pillow

结果显示的是

libjpeg.so.8

这就很蛋疼了,下面是解决方案:

pip uninstall Pillow

删除原有的Pillow模块,进入PYPI下载完整资源包
地址:https://pypi.org/project/Pillow/#files
最下面一个文件:Pillow-7.0.0.tar.gz (38.2 MB)

解压改文件,进入解压文件夹下的selftest.py
将第35行JPEG_ROOT=None修改为JPEG_ROOT = r'/home/xxx/opencv/build/3rdparty/libjpeg-turbo'
这个地址是我本地libjpeg-turbo的地址,因人而异 我直接拿C++的openCV编译好的库用了

修改完成后,运行

python setup.py install

与c++ openCV同版本的libjpeg的Pillow库就安装好了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值