PIL、OpenCV中resize算子实现不同的问题

PIL、OpenCV中resize算子实现不同的问题

测试图像:https://raw.githubusercontent.com/TropComplique/ssd-pytorch/master/images/dogs-and-cats.jpg (直接 wget 可获得)

测试版本

  • opencv-python 4.4.0.46
  • Pillow 8.0.1

测试代码

import cv2
from PIL import Image
import numpy as np# read images
path = './dogs-and-cats.jpg'
b = Image.open(path)
a = cv2.imread(path)[:, :, ::-1]# they are equal
c = np.asarray(b)
print(np.abs(np.int16(b) - np.int16(a)).mean())# resize images
a_0 = cv2.resize(a, (300, 300))
b_0 = b.resize((300, 300))a_1 = cv2.resize(a, (300, 300), interpolation=cv2.INTER_NEAREST)
b_1 = b.resize((300, 300), Image.NEAREST)# results of resizing are different, but visually they are equal
print(np.abs(np.int16(b_0) - np.int16(a_0)).mean())
print(np.abs(np.int16(b_1) - np.int16(a_1)).mean())

测试结果

0.0
1.785388888888889
7.455274074074074

结论

  • PIL 和 OpenCV 在读取图像文件的结果基本(也不是完全)是一致的;
  • 但是在按照各自默认的差值方式进行插值后,结果却有一定差异;
  • 即使指定相同的插值方式(本例中为最近邻插值)之后,结果也有较大的差异。

注意事项

  1. 注意 opencv 中的默认数据类型是 np.uint8 ,用以表示 0-255 之间的像素值,在计算两个 np 数组的像素值的差异时,要转换为 np.int16 并取绝对值,因为 np.uint8 中没有负数,如果像素值作差得到负数,则会被转换为 uint8 的正数,如 -1 -> 255。
  2. PIL 和 OpenCV 读取图像文件的结果在本例中是一样的(误差为0.0),但是笔者亲测这是与图像有关的,换一张图大概率就不能做到误差为 0 了,但是误差基本也都在 1 以内。
  3. PyTorch 中的 torchvision.transforms.Resize 就是采用的 PIL 的 resize 。

Ref:

Pillow vs cv2 resize

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac X11 XQuartz的安装与使用

mac X11 XQuartz的安装与使用 本地系统:MacOS 12.4 远程主机系统:Ubuntu 18.04 命令说明 ssh命令 ssh 命令大家很熟悉了,这里仅介绍与 X11 forwarding 相关的几个选项。 本部分译自 ssh 命令手册,可见 man ssh -X &#xf…

机器学习:系统设计与实现 分布式训练

机器学习系统:设计与实现 分布式训练 转自:https://openmlsys.github.io/chapter_distributed_training/index.html 随着机器学习的进一步发展,科学家们设计出更大型,更多功能的机器学习模型(例如说,GPT-3)…

Linux命令行及各常用工具代理设置

Linux命令行及各常用工具代理设置 命令行代理设置 1 通过命令行指定 直接为当前命令行设置代理 对当前终端的全部工具(apt、curl、wget、git 等全都有效)以下仅以 http 代理为例,如果是其他协议(如 socks 等)自行改…

VimScript 五分钟入门(翻译)

VimScript 五分钟入门(翻译) 转自:https://zhuanlan.zhihu.com/p/37352209 译注:折腾 Vim 当然要能看懂和改写相关脚本,而中文资料匮乏,缺一个提纲挈领的教程。本文翻译自 Andrew Scala 的 《Five Minute V…

C++多线程推理、生产者消费者模式封装

C多线程推理、生产者消费者模式封装 tensorRT从零起步迈向高性能工业级部署(就业导向) 课程笔记,讲师讲的不错,可以去看原视频支持下。 深度学习推理中的多线程知识概览 本章介绍的多线程主要是指算法部署时所涉及的多线程内容&a…

在Python中调用C/C++:cython及pybind11

在Python中调用C/C:cython及pybind11 转自:https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的时候, 执行速度有些捉急. 原因在于, python是一种动态类型语言, 在运行期间才去做数据类型检查, 这样效率就很低(尤其是大规…

Pytorch导出onnx模型,C++转化为TensorRT并实现推理过程

Pytorch导出onnx模型,C转化为TensorRT并实现推理过程 前言 本文为旨在实现整个Python导出PyTorch模型,C转化为TensorRT并实现推理过程过程,只与模型推理,模型部署相关,不涉及模型训练。为突出整个部署过程而非具体模…

从零Makefile落地算法大项目,完整案例教程

从零Makefile落地算法大项目,完整案例教程 转自:从零Makefile落地算法大项目,完整案例教程 作者:手写AI 前言 在这里,你能学到基于Makefile的正式大项目的使用方式和考虑,相信我,其实可以很简单…

PyTorch扩展自定义PyThonC++(CUDA)算子的若干方法总结

PyTorch扩展自定义PyThon/C(CUDA)算子的若干方法总结 转自:https://zhuanlan.zhihu.com/p/158643792 作者:奔腾的黑猫 在做毕设的时候需要实现一个PyTorch原生代码中没有的并行算子,所以用到了这部分的知识,再不总结就要忘光了 &a…

给 Python 算法插上性能的翅膀——pybind11 落地实践

给 Python 算法插上性能的翅膀——pybind11 落地实践 转自:https://zhuanlan.zhihu.com/p/444805518 作者:jesonxiang(向乾彪),腾讯 TEG 后台开发工程师 1. 背景 目前 AI 算法开发特别是训练基本都以 Python 为主&…

chrome自动提交文件_收集文档及提交名单统计

知乎文章若有排版问题请见谅,原文放在个人博客中【欢迎互踩!】文叔叔文档收集使用动机在我们的学习工作中,少不了要让大家集体提交文件的情况,举个最简单的例子:收作业。 传统的文件收集流程大致是:群内发出…

Pytorch自定义C++/CUDA扩展

Pytorch自定义C/CUDA扩展 翻译自:官方文档 PyTorch 提供了大量与神经网络、张量代数、数据整理和其他操作。但是,我们有时会需要更加定制化的操作。例如,想要使用论文中找到的一种新型的激活函数,或者实现自己设计的算子。 在 Py…

惠普800g1支持什么内存_惠普黑白激光打印机哪种好 惠普黑白激光打印机推荐【图文详解】...

打印机的出现让我们在生活和日常工作中变得越来越方便,不过随着科技的发展,打印机的类型也变得非常多,其中就有黑白激光打印机,而黑白激光打印机的品牌也有很多,比如我们的惠普黑白激光打印机,今天小编就给…

控制台输出颜色控制

控制台输出颜色控制 转自:https://cloud.tencent.com/developer/article/1142372 前端时间,写了一篇 PHP 在 Console 模式下的进度显示 ,正好最近的一个数据合并项目需要用到控制台颜色输出,所以就把相关的信息整理下,…

idea连接跳板机_跳板机服务(jumpserver)

一、跳板机服务作用介绍1、有效管理用户权限信息2、有效记录用户登录情况3、有效记录用户操作行为二、跳板机服务架构原理三、跳板机服务安装过程第一步:安装跳板机依赖软件yum -y install git python-pip mariadb-devel gcc automake autoconf python-devel readl…

【详细图解】再次理解im2col

【详细图解】再次理解im2col 转自:https://mp.weixin.qq.com/s/GPDYKQlIOq6Su0Ta9ipzig 一句话:im2col是将一个[C,H,W]矩阵变成一个[H,W]矩阵的一个方法,其原理是利用了行列式进行等价转换。 为什么要做im2col? 减少调用gemm的次数。 重要…

反思 大班 快乐的机器人_幼儿园大班教案《快乐的桌椅》含反思

大班教案《快乐的桌椅》含反思适用于大班的体育主题教学活动当中,让幼儿提高协调性和灵敏性,创新桌椅的玩法,正确爬的方法,学会匍匐前进,快来看看幼儿园大班《快乐的桌椅》含反思教案吧。幼儿园大班教案《快乐的桌椅》…

DCN可形变卷积实现1:Python实现

DCN可形变卷积实现1:Python实现 我们会先用纯 Python 实现一个 Pytorch 版本的 DCN ,然后实现其 C/CUDA 版本。 本文主要关注 DCN 可形变卷积的代码实现,不会过多的介绍其思想,如有兴趣,请参考论文原文: …

蓝牙耳机声音一顿一顿的_线控耳机党阵地转移成功,OPPO这款TWS耳机体验满分...

“你看到我手机里3.5mm的耳机孔了吗”,这可能是许多线控耳机党最想说的话了。确实,如今手机在做“减法”,而厂商们首先就拿3.5mm耳机孔“开刀”,我们也丧失了半夜边充电边戴耳机打游戏的乐趣。竟然如此,那如何在耳机、…

AI移动端优化之Im2Col+Pack+Sgemm

AI移动端优化之Im2ColPackSgemm 转自:https://blog.csdn.net/just_sort/article/details/108412760 这篇文章是基于NCNN的Sgemm卷积为大家介绍Im2ColPackSgemm的原理以及算法实现,希望对算法优化感兴趣或者做深度学习模型部署的读者带来帮助。 1. 前言 …