Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python opencv imwrite,图像旋转_Python_Image_Opencv_Png_Jpeg - Fatal编程技术网

Python opencv imwrite,图像旋转

Python opencv imwrite,图像旋转,python,image,opencv,png,jpeg,Python,Image,Opencv,Png,Jpeg,我正在使用python中的opencv(cv2)对jpg、png和jpeg、jpg格式的图像进行处理。我正在做一个测试,在读取“cv2.imread”之后立即使用“cv2.imwrite”将映像写入磁盘。我发现图像的一部分被旋转了,有些旋转了90天,有些旋转了180天。但大多数图像都保持正确的方向。我无法得出导致这种旋转的模式。有人知道更多细节吗?谢谢 听起来像EXIF方向标志: 为什么我的图像显示错误? 当您使用照片查看器检查计算机上的图像时,如果照片查看器可以读取Exif信息并尊重该信息,它

我正在使用python中的opencv(cv2)对jpg、png和jpeg、jpg格式的图像进行处理。我正在做一个测试,在读取“cv2.imread”之后立即使用“cv2.imwrite”将映像写入磁盘。我发现图像的一部分被旋转了,有些旋转了90天,有些旋转了180天。但大多数图像都保持正确的方向。我无法得出导致这种旋转的模式。有人知道更多细节吗?谢谢

听起来像EXIF方向标志:

为什么我的图像显示错误?
当您使用照片查看器检查计算机上的图像时,如果照片查看器可以读取Exif信息并尊重该信息,它将根据方向信息自动旋转原始图像。最终的结果是,无论实际存储方式如何,您都可以看到正确定向的照片

这意味着在桌面上查看图像时看起来是正确的,因为文件信息显示“在显示之前将此图像旋转90d”。如果脚本没有读取EXIF信息,它将存储一个新图像,而不带标志,因此图像将旋转显示

然而,根据opencv的说法,从3.1版开始自动处理这个问题。你的openCV版本是最新的吗

更新
中的一条评论建议您不能使用openCV编写exif数据。

您还可以使用或获取exif数据并在脚本中旋转图像。

在使用cv2.VideoCapture()读取视频文件时,使用cv2.imwrite()保存帧图像时,我遇到了类似的问题。这是因为OpenCV没有正确读取视频方向/旋转元数据。即使使用OpenCV 4,这对我来说仍然是一个问题


我最终使用了scikit视频——一个围绕ffmpeg的Python包装器。不再存在旋转问题:

一种可能的解决方案是在加载带有
imdecode
的图像时,将
cv2.IMREAD\u UNCHANGED
更改为
cv2.IMREAD\u COLOR
。由于某些原因,“未更改”无法正确读取EXIF元数据

显示您的代码。也要查看编码位@GeancarloMurillo…还有你的数据。请参阅:。谢谢您的建议。数据是私有的。至于代码,我只使用了两行:img=cv2.imread(file_path)cv2.imwrite(new_file_path,img)。谢谢,我做了一些调查,相信这是由于元数据中的旋转信息。你是否知道如何在opencv中检索此信息,并确保在我使用imwrite时,旋转信息仍然存在。让我澄清一些细节。在cv2.imread(img_路径)之后,它是python中的一个numpy数组。如果这次旋转信息是正确的,那么当我将这个数组写入文件时,它也应该是正确的;如果这一次,旋转信息不正确,原始图像的显示也将不正确。我很确定这是正确的。你检查过openCV版本了吗?我无法重现您的问题,但我添加了一个可能的解决方法。