Contour Properties
در اینجا برخی از خصوصیات اشیا مانند جامدی، قطر برابر ، تصویر ماسک ، شدت متوسط و غیره که معمولاً مورد استفاده قرار می گیرند را یاد می گیریم
1. Aspect Ratio
این نسبت عرض به ارتفاع محدود کننده شی است.
x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h
2. Extent
Extent نسبت منطقه کانتور به مساحت مستطیل محدود کننده است.
area = cv.contourArea(cnt)
x,y,w,h = cv.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
3. Solidity
جامدیت نسبت سطح کانتور به سطح بدنه محدب آن است.
area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area
4. Equivalent Diameter
قطر معادل قطر دایره ای است که مساحت آن همان اندازه کانتور است.
area = cv2.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)
5. Orientation
جهت گیری زاویه ای است که در آن جسم هدایت می شود. روش زیر همچنین به محورهای اصلی و محورهای جزئی می پردازد.
(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)
6. Mask and Pixel Points
در بعضی موارد ، ممکن است به تمام نقاطی که آن شی را تشکیل می دهد نیاز داشته باشیم. می توان به صورت زیر انجام داد:
mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv2.findNonZero(mask)
در اینجا ، دو روش ، یکی با استفاده از توابع Numpy ، دیگری با استفاده از تابع OpenCV (آخرین خط نظر داده شده) برای انجام همان کار ارائه شده است. نتایج نیز یکسان است اما با اندکی تفاوت. Numpy مختصات را در قالب **(row, column)** می دهد ، در حالی که OpenCV مختصات را در قالب **(x,y)** می دهد. بنابراین اساساً پاسخ ها عوض می شوند.
7. Maximum Value, Minimum Value and their locations
با استفاده از تصویر ماسک می توانیم این پارامترها را پیدا کنیم.
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(imgray,mask = mask)
8. Mean Color or Mean Intensity
در اینجا ، می توانیم رنگ متوسط یک شی را پیدا کنیم. یا می تواند شدت متوسط جسم در حالت خاکستری باشد. ما مجدداً از همان ماسک برای انجام آن استفاده می کنیم.
mean_val = cv2.mean(im,mask = mask)
9. Extreme Points
Extreme Points به معنای بالاترین ، پایین ترین ، سمت راست ترین و چپ ترین نقاط جسم است.
leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])
به عنوان مثال ، اگر آن را روی نقشه هند اعمال کنم ، نتیجه زیر را می گیرم: