0

CvCopy(); ボックス 2 のサイズをボックス 1 と等しくする最善の方法は何ですか? 適用することができます:

ここに画像の説明を入力

編集:

おそらく私は質問を適切に入れていませんでした。なので、言い直しています。画像 2 (上図) が与えられた場合、以下のように変換します。
ここに画像の説明を入力

基本的に、黒い境界線を追加する必要があります。画像が歪むため、サイズ変更は機能しません。言い換えれば、画像の周りの定義された厚さにゼロを追加する必要があります。

また、空で表示されていますが、これらの画像 (ボックス) には、表示されていないオブジェクトが含まれている場合があります。

4

2 に答える 2

1

copyMakeBorder関数を使用してこれを行うことができます。dotnet はわかりません。以下は python のサンプル コードです。上記の機能のドキュメントも参照してください: DOCS

最初に 2 つの画像を読み込みます。imbが大きい画像、imsが小さい画像です。

import cv2
import numpy as np

imb = cv2.imread('messi4.jpg')
ims = cv2.imread('template.jpg')

rb,cb大きな画像の行数と列数を とし、小さな画像についても同様ですrs,cs

rb,cb = imb.shape[:2]
rs,cs = ims.shape[:2]

最後に、copyMakeBorder関数を使用するには、上下左右に追加する行と列の数が必要です。したがって、それらを見つける必要があります。

top = (rb-rs)/2
bottom = rb - rs - top
left = (cb-cs)/2
right = cb - cs - left

最後に関数を適用します。

res = cv2.copyMakeBorder(ims,top,bottom,left,right,cv2.BORDER_CONSTANT)

結果を見てみましょう:

元の小さい画像:

ここに画像の説明を入力

変更された新しい画像:

ここに画像の説明を入力

私の大きな画像と同じサイズです(ここには表示されていません。必要ないと思います。必要に応じてアップロードできます)

于 2012-06-22T15:56:04.063 に答える
0

画像の歪みが大きくなるため、小さい方を拡大することはお勧めできません。最終的なサイズが問題にならない場合は、大きい方を縮小することをお勧めします。

を使用して画像のサイズを変更できますcv::resize( )(これは C++ 関数です - 私は OpenCV dot net を使用していません)。

実装の詳細は API にあります

マージに関しては、定義にもよりますが、単に使用cv::copy( )するだけでは機能しません。画像のマージに関する完全なチュートリアルは、こちらのドキュメントにあります

于 2012-06-22T11:44:27.160 に答える