はじめに
OpenCVで画像を扱っていると画像処理前の元の画像のデータが必要になることがあります。
画像に矩形や文字などを描画すると画像データは書き変わってしまうため、コピーした画像に対してこのような処理をすることが多いのではないでしょうか。
画像全体をコピー
OpenCVのcopy
関数利用する場合とNumpyのcopy
関数を使う2通りの方法があります。
OpenCVのcopy関数
名称 | 説明 |
入力画像 | コピー元の画像データ |
出力画像 | コピー先の画像データ |
使い方
import cv2 # 画像を読み込む image = cv2.imread('image.jpg') # 画像をコピーする copied_image = image.copy()
画像の読み込み方法については次の記事を参考にしてください。
Numpyのcopyメソッド
名称 | 説明 |
入力画像 | コピー元の画像データ |
出力画像 | コピー先の画像データ |
使い方
import cv2 import numpy as np # Numpyをインポートして略称を"np"とする # 画像を読み込む image = cv2.imread('image.jpg') # 画像をコピーする copied_image2 = np.copy(image)
部分的にコピー(OpenCVによる切り出し)
部分的にコピーをする場合は、その範囲を指定します。範囲は座標で上、下、右、左を指定し、関数は使いません。OpenCVでは画像の座標の原点は左上の角に設定されています。
名称 | 説明 |
入力画像 | コピー元の画像データ |
出力画像 | コピー先の画像データ |
上 | コピーする範囲の上端のy座標 |
下 | コピーする範囲の下端のy座標 |
左 | コピーする範囲の左端のx座標 |
右 | コピーする範囲の右端のx座標 |
使い方
import cv2 # 画像を読み込む image = cv2.imread('image.jpg') # 画像の左上の角から幅100 x 高さ50の範囲をコピー(切り出す) copied_image3 = image[0:50, 0:100](広告) OpenCV関連書籍をAmazonで探す
おわりに
以上がPythonのOpenCVを使って画像をコピーする方法です。
このコピーした画像は元の画像とは別のメモリ領域に作られるため、メモリ使用量に注意する必要があります。画像サイズが大きい場合、コピーするために使用するメモリも大きくなります。
最後までご覧頂きありがとうございました。
■(広告)OpenCVの参考書としてどうぞ!■
リンク
リンク
参考リンク
OpenCV: Operations with images
NumPy: numpy.copy