以矩形框起辨識的物體,並依序標上記號。

★範例所使用的圖檔下載位置

http://imgur.com/pSaQUS0

★程式範例執行

from imutils import contours
import numpy as np
import argparse
import imutils
import cv2

def order_points_old(pts):
    #設定物體輪廓之四個點位置,左上右上右下左下(順時針)
    rect = np.zeros((4, 2), dtype="float32")

    s = pts.sum(axis=1)
    rect[0] = pts[np.argmin(s)]
    rect[2] = pts[np.argmax(s)]

    return rect

ap = argparse.ArgumentParser()
args = vars(ap.parse_args())

image = cv2.imread("03.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)

edged = cv2.Canny(gray, 50, 100)
edged = cv2.dilate(edged, None, iterations=1)
edged = cv2.erode(edged, None, iterations=1)

cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]

#以順時針順序排列(刪除即相反)
(cnts, _) = contours.sort_contours(cnts)


for (i, c) in enumerate(cnts):

    if cv2.contourArea(c) < 100:
        continue

    box = cv2.minAreaRect(c)
    box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box)
    box = np.array(box, dtype="int")
    cv2.drawContours(image, [box], -1, (0, 255, 200), 2)

    rect = order_points_old(box)

    cv2.putText(image, "Object #{}".format(i + 1),
        (int(rect[0][0] - 15), int(rect[0][1] - 15)),
        cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255,255, 200), 1)

    cv2.imshow("Image", image)
    cv2.waitKey(0)


★範例執行結果









★細部程式介紹

【numpy.sum】

◎使用格式:



◎範例程式:



【numpy.diff】

◎使用格式:



◎範例程式:



Comments

comments powered by Disqus