Python 3.x Python的OpenCV显示JPG和PNG图像的不同结果?

Python 3.x Python的OpenCV显示JPG和PNG图像的不同结果?,python-3.x,image,opencv,image-processing,computer-vision,Python 3.x,Image,Opencv,Image Processing,Computer Vision,我一直在使用Python中的OpenCV创建OMR气泡纸扫描仪 我已经创建了PNG格式的气泡图(使用OpenCV) 然后我使用OpenCV读取这些文件OpenCV在PNG图像上做得非常好,它可以完美地工作。。。。但是当我在JPG文件上使用它时,它根本不起作用!列出索引不足的列表,因为它无法检测到所有正确的轮廓。 我知道这没有意义,但我尝试将相同的PNG图像直接保存到JPG中(使用Paint),结果相同。它适用于PNG版本,但不适用于JPG版本。即使图像完全相同,它也会在图像中显示不同数量的轮廓

我一直在使用Python中的OpenCV创建OMR气泡纸扫描仪

我已经创建了PNG格式的气泡图(使用OpenCV)

然后我使用OpenCV读取这些文件OpenCV在PNG图像上做得非常好,它可以完美地工作。。。。但是当我在JPG文件上使用它时,它根本不起作用!列出索引不足的列表,因为它无法检测到所有正确的轮廓。

我知道这没有意义,但我尝试将相同的PNG图像直接保存到JPG中(使用Paint),结果相同。它适用于PNG版本,但不适用于JPG版本。即使图像完全相同,它也会在图像中显示不同数量的轮廓


任何有关这方面的帮助都将不胜感激,谢谢

问题是您使用的图像格式固有的。主要有两种压缩技术(所有图像格式:jpeg、png、webp都是压缩技术):

  • 无损压缩
  • 有损压缩
顾名思义,无损压缩技术在压缩时不会改变底层矩阵数据,例如:
PNG
。有损压缩技术可以用一些最接近的舍入值替换底层数据以节省一些空间,例如:
JPEG


在您使用JPEG格式保存图像的情况下,它可能会扭曲一些RGB像素信息,因此如果您的阈值范围非常窄,那么与
PNG

相比,您将获得不同的结果。谢谢,这很有意义。这意味着我应该继续使用PNG。是的,PNG在保存图像RGB数据方面更好。你也可以使用无损耗压缩TIFF(LZW或ZIP)。只是不要使用JPG压缩。