субота, 17 квітня 2021 р.

Обмежуючий прямокутник, коло, лінія головного напрямку

Сторони паралельні координатним осям, виділено лише один контур
 
def boundingRect(img):
    if len(img.shape)==3:
        img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        copy=img.copy()
    else:
        img_gray=img
        copy=cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
    cnt=find_cont(img)
    x,y,w,h = cv2.boundingRect(cnt[0])
    cv2.rectangle(copy,(x,y),(x+w,y+h),(0,255,0),2)
    return copy
Обмежуючий прямокутник мінімальної площі, виділено лише один контур
 
def MinBboundingRect(img):
    if len(img.shape)==3:
        img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        copy=img.copy()
    else:
        img_gray=img
        copy=cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
    cnt=find_cont(img)
    rect = cv2.minAreaRect(cnt[0])
    box = cv2.boxPoints(rect).astype(np.uint64)
    cv2.drawContours(copy,[box],0,(0,0,255),2)
    return copy   
Обмежувальне коло, виділено один контур
 
def MinKolo(img):
    if len(img.shape)==3:
        img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        copy=img.copy()
    else:
        img_gray=img
        copy=cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
    cnt=find_cont(img)
    (x,y),radius = cv2.minEnclosingCircle(cnt[0])
    center = (int(x),int(y))
    radius = int(radius)
    return cv2.circle(copy,center,radius,(0,255,0),2)
Лінія головного напрямку, виділено один контур
 
def FitLine(img):
    if len(img.shape)==3:
        img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        copy=img.copy()
    else:
        img_gray=img
        copy=cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
    rows,cols = copy.shape[:2]
    [vx,vy,x,y] = cv2.fitLine(cnt[0], cv2.DIST_L2,0,0.01,0.01)
    lefty = int((-x*vy/vx) + y)
    righty = int(((cols-x)*vy/vx)+y)
    return cv2.line(copy,(cols-1,righty),(0,lefty),(0,255,0),2)

Немає коментарів:

Дописати коментар