使用Python和OpenCV,我尝试读取大小为(3264 * 2448)的图像,但结果大小始终为(2448 * 3264)。这意味着图像的方向改变了90度。代码如下:
img1 = cv2.imread("C:\\Users\\test.jpg", 0)
cv2.namedWindow("test", 0)
cv2.imshow("test", img1)
原始图像是这样的:
但我得到这个图像:
我在一个程序中遇到了类似的问题。在我的情况下,问题是由于存储在图像中的相机方向数据。
在OpenCV Java中使用CV_LOAD_IMAGE_COLOR
而不是CV_LOAD_IMAGE_UNCHANGED
后问题得到了解决。
OpenCV仅将EXIF'Orientation'标签应用于OpenCV版本> = 3.1。如果您遇到较低版本且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)