【问题标题】:Image Orientation (python+openCV)图像方向(python+openCV)
【发布时间】:2017-11-16 03:38:10
【问题描述】:

使用 Python 和 OpenCV,我尝试读取大小为 (3264*2448) 的图像,但结果大小始终为 (2448*3264)。这意味着图像的方向改变了 90 度。代码如下:

img1 = cv2.imread("C:\\Users\\test.jpg", 0) 
cv2.namedWindow("test", 0) 
cv2.imshow("test", img1)

原图是这样的:

但我得到了这张图片:

【问题讨论】:

  • 查看图片文件的exif信息。你看到"Orientation" 信息了吗?

标签: python image opencv direction imread


【解决方案1】:

我在一个程序中遇到了类似的问题。就我而言,问题是由于存储在图像中的相机方向数据造成的。

我在 OpenCV Java 中使用 CV_LOAD_IMAGE_COLOR 而不是 CV_LOAD_IMAGE_UNCHANGED 后问题得到解决。

【讨论】:

  • 谢谢,我遇到了相反的问题。我不得不阻止opencv旋转。您的回答帮助我找到了正确的方法。我最终使用了:cv2.imread(name, cv2.IMREAD_IGNORE_ORIENTATION | cv2.IMREAD_COLOR)
  • 这应该作为答案添加!
  • 添加到@oak 回复,cv2.IMREAD_LOAD_GDAL 而不是cv2.IMREAD_IGNORE_ORIENTATION 也可以。
【解决方案2】:

OpenCV 仅应用 OpenCV 版本 >= 3.1 的 EXIF“方向”标签。 如果您使用较低版本并且 PIL 可用:

import PIL, cv2, numpy

path = 'test.jpg'
pix = PIL.Image.open(path) 
# get correction based on 'Orientation' from Exif (==Tag 274)
try:
    deg = {3:180,6:270,8:90}.get(pix._getexif().get(274,0),0)
except:
    deg = 0
if deg != 0:
    pix=pix.rotate(deg, expand=False)
# convert PIL -> opencv
im0 = numpy.array(pix)
if len(im0.shape)==3 and im0.shape[2] >= 3:
    # fix bgr rgb conventions
    # note: this removes a potential alpha-channel (e.g. if path point to a png)
    im0 = cv2.cvtColor(im0, cv2.COLOR_BGR2RGB) 

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2015-05-16
    • 2018-02-10
    • 2012-10-13
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多