2017-11-04 9 views
1

opencvを使用して画像を読み取ろうとしていますが、いくつかの変換(サイズ変更とオフセット)を行い、最後のステップとして画像をトリミングします。私の最後の行であるcrop_img = offset_image[0:1080, 0:1920].copy()では、1920x1080のクロップされた画像が作成されることを期待しています。私のcrop_img.sizeプリントアウトはそれが正しいことを示しています。しかし、私が.imshow()を実行すると、フルサイズのオリジナル画像が表示されます。OpenCV .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の切り抜かれた画像が表示されないのですか?

+0

あなたはおそらく、あなたが実際に起こることを期待していたものを言うために何かを追加する必要があり、この質問は十分 – GPPK

+1

@GPPK公正非常に不明瞭です。ちょうど質問を修正しました。 –

+0

ちょうどあなたのコードを実行し、それは完全に正常に動作するように見える、あなたはあなたのために元のイメージを表示しているのですか?両者の違いが分かるかどうかを確認するために、両方でimshowを実行してみてください。 – Tom

答えて

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() 
関連する問題