OpenCV

画像処理 「OpenCV 4」線をクリップしてみる

図形の描画の練習をしてきましたが、今日は、もう少し踏み込んで、線をクリップしてみます。

線をクリップ

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()
実行結果