OpenCV .imshow()未显示尺寸合适的图片

时间:2017-11-04 21:17:12

标签: python opencv

我正在尝试使用opencv读取图像,进行一些转换(调整大小和偏移),然后作为最后一步,对图像进行裁剪。在我的最后一行crop_img = offset_image[0:1080, 0:1920].copy()中,我希望创建一个裁剪的1920x1080图像。我的crop_img.size打印输出显示这是正确的。但是,当我执行.imshow()时,它会显示完整大小的原始图像。

import numpy as np
import cv2 as cv
import copy

original = cv.imread("IMG_0015_guides.jpg", cv.IMREAD_UNCHANGED)
img_resize = cv.resize(original, (0,0), fx=.9, fy=.9) 


rows,cols,_ = img_resize.shape
M = np.float32([[1,0,100],[0,1,50]])
offset_image = cv.warpAffine(img_resize,M,(cols,rows))

crop_img = offset_image[0:1080, 0:1920].copy()

print('img_resize {}'.format(img_resize.shape))
print('offset_image {}'.format(offset_image.shape))
print('cropped {}'.format(crop_img.shape))

cv.imshow('image',crop_img)
cv.waitKey(0)
cv.destroyAllWindows()

>>> img_resize (3110, 4666, 3)
>>> offset_image (3110, 4666, 3)
>>> cropped (1080, 1920, 3)

我完全不知所措。为什么它没有显示裁剪的1920x1080图像?

1 个答案:

答案 0 :(得分:0)

使用OpenCV的imshow进行可视化时,处理大量图像会让人感到困惑。 我运行了你的代码,看起来它正在做你期望它做的事情。我建议仅为了可视化目的再次调整图像大小。以下代码在此image上成功运行。

import numpy as np
import cv2 as cv
import copy

original = cv.imread("4k-image-tiger-jumping.jpg", cv.IMREAD_UNCHANGED)

# resize original for visualization purposes only
print('original {}'.format(original.shape))
original_resized = cv.resize(original, (0,0), fx=.1, fy=.1) 
cv.imshow('original_resize',original_resized)


img_resize = cv.resize(original, (0,0), fx=.9, fy=.9) 

rows,cols,_ = img_resize.shape
M = np.float32([[1,0,100],[0,1,50]])
offset_image = cv.warpAffine(img_resize,M,(cols,rows))

crop_img = offset_image[0:1080, 0:1920].copy()

print('img_resize {}'.format(img_resize.shape))
print('offset_image {}'.format(offset_image.shape))
print('cropped {}'.format(crop_img.shape))


# resize cropped for visualization purposes only
vis_r,vis_c,_ = original_resized.shape
cropped_resized = cv.resize(crop_img, (vis_c, vis_r))
cv.imshow('cropped_resized',cropped_resized)


# cv.imshow('image',crop_img)

cv.waitKey(0)
cv.destroyAllWindows()