68

私はopencvが初めてです。ここに質問があります.cppのcv::clone()と同じように動作するpython関数は何ですか? 私は直角を取得しようとします

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

しかし、線を引くと、線が img と rectImage の両方に表示されるので、どうすればこれを行うことができますか?

4

5 に答える 5

107

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

newImage = myImage.copy()

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

于 2016-02-27T07:22:48.533 に答える
68

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

例えば:

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.
于 2013-05-14T05:01:20.583 に答える
1

私のお気に入りの方法は、境界線なしで cv2.copyMakeBorder を使用します。

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE)
于 2015-05-14T00:32:02.577 に答える
1

Python 標準ライブラリをそのまま使用できます。次のように、元のイメージのシャロー コピーを作成します。

import copy

original_img = cv2.imread("foo.jpg")
clone_img = copy.copy(original_img)
于 2015-04-21T14:00:43.523 に答える