图像方向(python + openCV)

yua*_*jtu 5 python opencv image direction imread

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

img1 = cv2.imread("C:\\Users\\test.jpg", 0) 
cv2.namedWindow("test", 0) 
cv2.imshow("test", img1)
Run Code Online (Sandbox Code Playgroud)

原始的图像是这样的:

在此处输入图片说明

但我得到这张图片:

在此处输入图片说明

小智 7

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

在使用CV_LOAD_IMAGE_COLOR而不是CV_LOAD_IMAGE_UNCHANGED在OpenCV Java中使用后,问题已解决。

  • 谢谢,我遇到了相反的问题。我必须防止opencv旋转。您的回答帮助我找到了正确的方法。我最终使用了:`cv2.imread(name,cv2.IMREAD_IGNORE_ORIENTATION | cv2.IMREAD_COLOR)` (2认同)

Oli*_*del 6

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) 
Run Code Online (Sandbox Code Playgroud)