python - OpenCV .imshow() 未显示正确大小的图像

标签 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 图片?

最佳答案

在使用 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()

关于python - OpenCV .imshow() 未显示正确大小的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47115721/

相关文章:

python - 设置 xsd :element in the xsd file 的默认值

python - 如何删除特定列值不在其他数组中的行?

java - Android:将 calcOpticalFlowPyrLK 与 MatOfPoint2f 结合使用

c++ - JPG 图像在 cvCreateImageHeader 之后从 30KB 变为 300KB

带有列表的 Python 实例行为

Python:Image.frombytes() 参数

python - 是否可以限制 Flask 请求触发的 CPU/内存使用?

python - 在视频中每秒绘制一个圆圈

c++ - 视频节目中更好的边缘滤波算法

python - 在 OSX Lion 上导入 opencv brew install 会导致段错误