図形の描画の練習をしてきましたが、今日は、もう少し踏み込んで、線をクリップしてみます。
線をクリップ
cv2.clipLine(imgRect, pt1, pt2) → retval, pt1, pt2
- imgRect – 画像の長方形
- pt1 – 線の開始点
- pt2 – 線の終了点
関数clipLine()は、指定された長方形(imgRect)内に完全に収まるラインセグメントの一部を計算する。線分が完全に四角形の外側にある場合、falseを返す。そうでなければ、trueを返す。
サンプルコード
import cv2
import numpy as np
import matplotlib.pyplot as plt
# キャンバスの準備
# キャンバスを縦横500px、BRG、8ビットの符号なしIntで作成
canvas = np.zeros((500, 500, 3), dtype="uint8")
# グレーで塗りつぶし
canvas[:] = [128, 128, 128]
line_start_pos = (0, 0)
line_end_pos = (500, 500)
rect = (100, 100, 200, 200) # x, y, w, h
cv2.line(canvas, line_start_pos, line_end_pos, (255, 0, 0), 1)
cv2.rectangle(canvas, rect, (0, 255, 255), 3)
# クリップ
ret, p1, p2 = cv2.clipLine(rect, line_start_pos, line_end_pos)
# クリップの結果を描画
if ret:
cv2.line(canvas, p1, p2, (0, 0, 255), 1)
# 描画結果を表示
plt.imshow(canvas)
plt.show()