サイズ変更された画像を表示するためにOpenCV2.0とPython2.6を使いたいです。私は http://opencv.willowgarage.com/documentation/python/cookbook.html でこの例を使用し採用しましたが、残念ながらこのコードはOpenCV2.1用で、2.0では動作していないようです。ここに私のコード:
import os, glob
import cv
ulpath = "exampleshq/"
for infile in glob.glob( os.path.join(ulpath, "*.jpg") ):
im = cv.LoadImage(infile)
thumbnail = cv.CreateMat(im.rows/10, im.cols/10, cv.CV_8UC3)
cv.Resize(im, thumbnail)
cv.NamedWindow(infile)
cv.ShowImage(infile, thumbnail)
cv.WaitKey(0)
cv.DestroyWindow(name)
使えないので
cv.LoadImageM
私が使った
cv.LoadImage
代わりに、他のアプリケーションでは問題ありませんでした。それにもかかわらず、cv.iplimageには属性行、列、またはサイズがありません。誰もが私にヒントを与えることができます、この問題を解決する方法?ありがとう。
CV2を使いたい場合は、resize
関数を使う必要があります。
例えば、これは両方の軸を半分にリサイズします:
small = cv2.resize(image, (0,0), fx=0.5, fy=0.5)
これにより、画像のサイズが100列(幅)と50行(高さ)に変更されます。
resized_image = cv2.resize(image, (100, 50))
別の選択肢は、次のようにしてscipy
モジュールを使うことです。
small = scipy.misc.imresize(image, 0.5)
あなたがそれらの関数のドキュメントで読むことができる明らかにもっと多くのオプションがあります( cv2.resize 、 scipy.misc.imresize )。
更新:
SciPyのドキュメント によると:
imresize
はSciPy 1.0.0では非推奨で、1.2.0では削除される予定です。
代わりにskimage.transform.resize
を使用してください。
ファクタでリサイズしようとしているなら、実際には skimage.transform.rescale
が欲しいかもしれません。
画像のサイズを変更する方法は2つあります。新しいサイズを指定できます。
手動で。
height, width = src.shape[:2]
dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)
倍率によって。
dst = cv2.resize(src, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC)
、ここでfxは水平軸に沿ったスケールファクタ、そして垂直軸に沿ったfyです。
画像を縮小するには、INTER_AREA補間を使用するのが一般的によく見えます。一方、画像を拡大するには、INTER_CUBIC(低速)またはINTER_LINEAR(一般的には高速ですがそれでも大丈夫です)が最適です。
import cv2
img = cv2.imread('YOUR_PATH_TO_IMG')
height, width = img.shape[:2]
max_height = 300
max_width = 300
# only shrink if img is bigger than required
if max_height < height or max_width < width:
# get scaling factor
scaling_factor = max_height / float(height)
if max_width/float(width) < scaling_factor:
scaling_factor = max_width / float(width)
# resize image
img = cv2.resize(img, None, fx=scaling_factor, fy=scaling_factor, interpolation=cv2.INTER_AREA)
cv2.imshow("Shrinked image", img)
key = cv2.waitKey()
import cv2 as cv
im = cv.imread(path)
height, width = im.shape[:2]
thumbnail = cv.resize(im, (width/10, height/10), interpolation = cv.INTER_AREA)
cv.imshow('exampleshq', thumbnail)
cv.waitKey(0)
cv.destroyAllWindows()
GetSize関数を使ってこれらの情報を取得することができます。cv.GetSize(im)は画像の幅と高さを持つTupleを返します。また、im.depthとimg.nChanを使ってさらに情報を得ることもできます。
画像のサイズを変更するには、マトリックスではなく別の画像を使用して、少し異なるプロセスを使用します。同じ種類のデータで作業することをお勧めします。
size = cv.GetSize(im)
thumbnail = cv.CreateImage( ( size[0] / 10, size[1] / 10), im.depth, im.nChannels)
cv.Resize(im, thumbnail)
お役に立てれば ;)
ジュリアン
def rescale_by_height(image, target_height, method=cv2.INTER_LANCZOS4):
"""Rescale `image` to `target_height` (preserving aspect ratio)."""
w = int(round(target_height * image.shape[1] / image.shape[0]))
return cv2.resize(image, (w, target_height), interpolation=method)
def rescale_by_width(image, target_width, method=cv2.INTER_LANCZOS4):
"""Rescale `image` to `target_width` (preserving aspect ratio)."""
h = int(round(target_width * image.shape[0] / image.shape[1]))
return cv2.resize(image, (target_width, h), interpolation=method)