原理は、画像マトリックスを操作することにより、指定された位置の画像を取得または結合することです。
写真の指定した領域をキャプチャするか、指定した領域に写真を追加します
コードは以下のように表示されます。
# 引入包
import cv2 as cv
def jie_image(src1):
src2 = src1[369:637, 572:922] # 截取指定的区域
cv.namedWindow("splice", cv.WINDOW_NORMAL)
cv.imshow("splice", src2)
src1[169:437, 572:922] = src2 # 指定位置填充,大小要一样才能填充
cv.namedWindow("merge", cv.WINDOW_NORMAL)
cv.imshow("merge", src1)
src = cv.imread("./static/image/blur.jpg")
cv.namedWindow("oldImage", cv.WINDOW_NORMAL)
cv.imshow("oldImage", src)
jie_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
コード説明:
この図に従って解析してみましょうsrc1[369:637, 572:922]意味。
0:375 は、垂直方向から369 ~ 637 をインターセプトすることを指します
。 240:480 は、画像の左上隅を原点とした水平方向から572 ~ 922 をインターセプトすることを指します。
∣−−--------369,637 − − − − − − − − − − − − − − − − − >x
∣ ∣ ∣
∣ ∣ ∣
∣ ∣ ∣
∣ ∣− − − − − − −572,922
∣
∨
y
もちろん、スライスを使用して関心領域 (ROI、関心領域) を選択することもできます。
PS. 最初、ここで xy が逆転しているのが不思議に思いましたが、実はこれは 2 次元の ndarray インデックスの概念が明確ではないためです。2 次元 ndarray インデックスは実際には C++/Java の 2 次元配列インデックスと同じで、最初に行を検索し、次に列を検索します。このように理解しても不思議ではありません。より具体的に言うと、実際には最初の軸を見つけてから 2 番目の軸を見つけます。軸の概念は、「基本」の最初の 3 つの段落を参照できます。y は最初の軸を表し、x は 2 番目の軸を表します。常に最初の軸が検索され、次に 2 番目の軸が検索されます。
src1[169:437, 572:922] = src2
ここで [169:437, 572:922] は src2 の画像と同じサイズである必要があります。そうでない場合はエラーが報告されます。
操作結果: