【问题标题】:Image height and width getting swapped when read using opencv imread使用 opencv imread 读取时图像高度和宽度被交换
【发布时间】:2015-06-28 01:39:25
【问题描述】:

当我使用 opencv imread 函数读取图像时,我发现它的高度和宽度被交换为应有的值。就像我的原始图像的尺寸(610 x 406)但是在使用 opencv::imread 函数读取时,它的尺寸是 406 x 610。此外,如果我在将原始图像传递给函数之前旋转原始图像,那么也没有变化。读取的图像仍然具有原始尺寸。

请参阅示例代码和图像以进行说明: 因此,下面我提供了输入图像:一张是原始图像,第二张是旋转的(我使用 Windows 旋转命令旋转它,通过右键单击并选择“向右旋转”)。我为这两个图像得到的输出是相同的。在我看来,旋转图像实际上并没有改变它的形状。我是这么认为的,因为当我尝试将旋转后的图像也放在这里时,它只显示了它的未旋转版本(在预览中),所以我不得不对其进行截屏,然后将其粘贴在这里。

这是代码:

import cv2
import numpy as np
import sys
import os

image = cv2.imread("C:/img_8075.jpg")
print "image shape: ",image.shape
cv2.imshow("image",image)
cv2.waitKey(0)
image2 = cv2.imread("C:/img_8075_Rotated.jpg")
print "image shape: ",image2.shape
cv2.imshow("image",image2)
cv2.waitKey(0)

我得到的结果是:图像形状:(406,610,3) 图像形状:(406,610,3) 两张图片。

我无法在此处粘贴输入/输出图片,因为它说您应该拥有“10 个声誉”,而我刚刚加入。 任何的意见都将会有帮助。谢谢!

【问题讨论】:

  • 旋转图像后尺寸相同?你确定你没有遗漏什么吗?
  • 您是如何发现维度被交换的? .cols 应该是您的原始图像宽度,.rows 应该是您的原始图像高度。如果不是这种情况,也许您的图像查看器会在显示之前在内部旋转图像?!?
  • 嘿 Micka,我认为您说我的图像查看器在显示之前内部旋转了图像是对的。但是,我只想将此旋转后的图像用作我的 opencv(imread 函数)的输入。我正在做一个类项目,我从文件夹中读取图像以创建其合成图像。因此,有时,文件夹中的图像方向不正确。所以,我旋转它们(使用,windows right-click->rotate right command)。但是,opencv 只读取原始图像。我该怎么办?

标签: python opencv imread


【解决方案1】:

我相信你只是把约定搞混了。可以访问 OpenCV Mat 结构(行、列)。

因此,1920x1080 图像将是 1080 行乘 1920 列 (1080,1920)

【讨论】:

  • 您可以在这里找到更多信息; docs.opencv.org/modules/core/doc/basic_structures.html#mat-mat
  • 嘿,我知道这与约定无关。它是关于读取使用“Windows->右键单击->向右/向左旋转”命令旋转的图像。我相信这种旋转只是为了查看目的,它不会改变图像文件内的形状。但是,我希望我的 opencv 函数读取旋转的图像(因为另一个没有正确定向)。我该怎么做?
  • 为什么不把图像读入后在opencv中旋转; opencvexamples.blogspot.com/2014/01/…
  • 您好,谢谢您的建议。但是,我不能这样做,因为我正在创建一个应用程序,它从文件夹中读取许多图像以创建合成图像(如拼贴画)。文件夹中存在的一些图像已被旋转,而一些则保持原样(基本上,所有图像都已正确定位)。但是,这个更新的方向信息在被读取时会消失:(
  • 或者...您始终可以在您知道会更改底层位图的应用程序中旋转它们。例如 MS Paint 或 GIMP
【解决方案2】:

一般 Mat.rows 代表图片的高度,Mat.cols 代表图片的宽度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2017-03-20
    • 2010-11-18
    • 1970-01-01
    • 2015-06-13
    • 2018-05-06
    • 2013-03-07
    相关资源
    最近更新 更多