出现问题:
一批tiff格式图像,部分图像使用cv读取显示后,发现与原图像相比,上下颠倒
尝试解决方法:
查询之后,怀疑是exif信息问题【有说是和IplImage的origin属性有关系,但是作者使用的python,无法从该点进行验证
- 在
imread()
中添加参数
cv2.IMREAD_IGNORE_ORIENTATION
和cv2.IMREAD_UNCHANGED
都无效。
import cv2
ii = cv2.imread(img_path,cv2.IMREAD_IGNORE_ORIENTATION)
cv2.namedWindow("resized",0)
cv2.resizeWindow("resized", 640, 480)
cv2.imshow("resized",ii)
cv2.waitKey(0)
- 改用PIL读取图像,显示正常,但是出现颜色问题,且考虑如果改用PIL库,代码修改量太大,所以舍去不用
from PIL import Image, ImageOps
img = Image.open(img_path)
img = ImageOps.exif_transpose(img)
img.show()
最终解决方法
使用exifread
库,获取图像的exif信息,判断图像是否颠倒
参考链接 https://blog.csdn.net/weixin_43143224/article/details/91048404
pip install exifread
import exifread
f2 = open(img_path, 'rb')
tags = exifread.process_file(f2)
print(tags['Image Orientation'])
如果图像颠倒,则输出value,作者输出的是“Mirrored vertical
”,若无颠倒,则无该字段值KeyError: 'Image Orientation'
,可据此进行判断,然后对于颠倒的图像进行翻转。
ii = cv2.flip(ii, 0) #将图像进行上下翻转