вырезать контур из определенного стержня в opencv-python - PullRequest
0 голосов
/ 29 января 2019

У меня есть небольшая программа, которая берет изображение и находит там все фигуры, затем находит и рисует контур каждой фигуры и вычисляет площадь этих контуров.

import numpy as np
import cv2
global p1x,p2x
global ratio
p1x=0
p2x=0
ratio=0
def DoCalibrate(event, x, y, flags, param):
    global p1x
    global p2x
    global ratio
    if event==cv2.EVENT_LBUTTONDOWN:
        if p1x==0:
            p1x=x
        elif p1x!=0 and p2x==0:
            p2x=x
            ratio=(abs((p1x-p2x))/2)**2
            for cnt in cnts:
                cv2.drawContours(image,cnts, -1, (0, 0, 255), 1)
                print('ratio is = ',ratio)
                print('are in cm =',cv2.contourArea(cnt)/ratio)

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

_,areaThresh = cv2.threshold(gray,128,255,cv2.THRESH_BINARY_INV)

im, cnts, hier = cv2.findContours(areaThresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

for cnt in cnts:
    cv2.drawContours(image,cnts, -1, (0, 0, 255), 1)
    print('area in pixel = ',cv2.contourArea(cnt))
cv2.namedWindow('frame', cv2.WINDOW_AUTOSIZE )

cv2.setMouseCallback("frame", DoCalibrate)
cv2.imshow("thresh", areaThresh)
cv2.imshow("frame", image)
cv2.waitKey(0)

enter image description here

Теперь мне нужно вычислить площадь этих контуров при разрезании по определенной горизонтальной линии, как на рисунке ниже:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...