2013-05-14 6 views
21

私はopencvを使い慣れています。ここでは質問ですが、cppでcv :: clone()と同じように動作するpython関数は何ですか? 私はちょうどcv2 pythonでイメージを複製

rectImg = img[10:20, 10:20] 

で矩形を取得しようが、私はその上に線を引くとき、私はラインがIMGとrectImageの両方に表示され見つけるので、どのように私はこれを成し遂げることができますか?

答えて

30

cv2を使用する場合、正しい方法はNumpyで.copy()メソッドを使用することです。必要なアレイのコピーが作成されます。それ以外の場合は、そのオブジェクトのビューのみが生成されます。

例:

In [1]: import numpy as np 

In [2]: x = np.arange(10*10).reshape((10,10)) 

In [4]: y = x[3:7,3:7].copy() 

In [6]: y[2,2] = 1000 

In [8]: 1000 in x 
Out[8]: False  # see, 1000 in y doesn't change values in x, parent array. 
+1

これらのマジックナンバーはどういう意味ですか? – raaj

+0

0-100の範囲の数字です。各ステップの後に 'x'と' y'を表示するだけです。それからあなたはそのアイデアを得るでしょう。 –

1

あなたは、単にPythonの標準ライブラリを使用することができます。

import copy 

original_img = cv2.imread("foo.jpg") 
clone_img = copy.copy(original_img) 
0

私のお気に入りの方法は、境界線を持たないcv2.copyMakeBorderを使用しています。そのようにしてください。

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE) 
26

最初の答えは正しいですが、本質的にnumpy配列を使用するcv2を使用しているとします。ですから、「myImage」という完全な別のコピーを作成するには:

newImage = myImage.copy() 

これで十分です。 numpyをインポートする必要はありません。