Last active
May 30, 2017 17:52
-
-
Save bigsnarfdude/30f1d35258e9b80beaabe7e436bef112 to your computer and use it in GitHub Desktop.
[boundingBox] opencv code WIP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) | |
for c in contours: | |
rect = cv2.boundingRect(c) | |
if rect[2] < 100 or rect[3] < 100: continue | |
print cv2.contourArea(c) | |
x,y,w,h = rect | |
cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2) | |
cv2.putText(im,'Moth Detected',(x+w+10,y+h),0,0.3,(0,255,0)) | |
cv2.imshow("Show",im) | |
cv2.waitKey() | |
cv2.destroyAllWindows() | |
import cv2 | |
import numpy as np | |
# read and scale down image | |
img = cv2.pyrDown(cv2.imread('hammer.jpg', cv2.IMREAD_UNCHANGED)) | |
# threshold image | |
ret, threshed_img = cv2.threshold(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), | |
127, 255, cv2.THRESH_BINARY) | |
# find contours and get the external one | |
image, contours, hier = cv2.findContours(threshed_img, cv2.RETR_TREE, | |
cv2.CHAIN_APPROX_SIMPLE) | |
# with each contour, draw boundingRect in green | |
# a minAreaRect in red and | |
# a minEnclosingCircle in blue | |
for c in contours: | |
# get the bounding rect | |
x, y, w, h = cv2.boundingRect(c) | |
# draw a green rectangle to visualize the bounding rect | |
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2) | |
# get the min area rect | |
rect = cv2.minAreaRect(c) | |
box = cv2.boxPoints(rect) | |
# convert all coordinates floating point values to int | |
box = np.int0(box) | |
# draw a red 'nghien' rectangle | |
cv2.drawContours(img, [box], 0, (0, 0, 255)) | |
# finally, get the min enclosing circle | |
(x, y), radius = cv2.minEnclosingCircle(c) | |
# convert all values to int | |
center = (int(x), int(y)) | |
radius = int(radius) | |
# and draw the circle in blue | |
img = cv2.circle(img, center, radius, (255, 0, 0), 2) | |
print(len(contours)) | |
cv2.drawContours(img, contours, -1, (255, 255, 0), 1) | |
cv2.imshow("contours", img) | |
ESC = 27 | |
while True: | |
keycode = cv2.waitKey() | |
if keycode != -1: | |
keycode &= 0xFF | |
if keycode == ESC: | |
break | |
cv2.destroyAllWindows() | |
Use cv2.boundingRect to get the bounding rectangle (in green), cv2.minAreaRect to get the minimum area rectangle (in red), and cv2.minEnclosingCircle to get minimum enclosing circle (in blue). | |
Result: | |
contour_all.png |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment