2012-03-04 13 views
1

私はこのようになりますズーム機能を記述しようとしています:OpenCVのズーム機能奇妙な結果

centre = ((im.width-1)/2, (im.height-1)/2) 
width = int(im.width/(2.0*level)) 
height = int(im.height/(2.0*level)) 
rect = (centre[0]-width, centre[1]-height, width*2, height*2) 
dst = cv.GetSubRect(im, rect) 
cv.Resize(dst, im) 

私は上記の書かれている正確に何を使用する場合、私はどこ結果の下半分奇妙な結果を得ます画像が歪んでぼやけています。しかし、私がcv.Resize(dst, im)

size = cv.CloneImage(im) 
cv.Resize(dst, size) 
im = size 

と置き換えると、それは問題なく動作します。どうしてこれなの?私がズームを実行している方法に根本的に何か間違っていますか?

答えて

3

cv.Resizeでは、ソースと宛先が別々のメモリ位置であることが必要です。

コードの最初のスニペットでは、cv.GetSubRectを使用して、ズームしたい画像の領域を指し示すオブジェクトを生成しています。新しいオブジェクトは新しいメモリ位置を指していません。元のオブジェクトのサブセットであるメモリ位置を指しています。

cv.Resizeは両方のメモリ位置が異なる必要があるため、取得していないのは未定義の動作の結果です。

コードの2番目の部分では、cv.CloneImageを使用してこの基準を満たしています。 あなたは最初にimのコピーを作成していますが、空の画像も使用できましたが、次にcv.Resizeを使用してdstのサイズを変更し、結果の画像をサイズで書き込んでいます。

私の助言は、それらを使用する前に、機能documentationを調べることです。