From 88333f4fb5b87ff94265a0c654df61ae9f761e65 Mon Sep 17 00:00:00 2001 From: Cole Deck Date: Thu, 5 Dec 2019 10:16:59 -0600 Subject: [PATCH] Initial commit --- img.jpg | Bin 0 -> 34249 bytes img2.jpg | Bin 0 -> 31118 bytes img3.jpg | Bin 0 -> 34051 bytes test3.py | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 180 insertions(+) create mode 100644 img.jpg create mode 100644 img2.jpg create mode 100644 img3.jpg create mode 100644 test3.py diff --git a/img.jpg b/img.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03c1f6f5f706448c9910bf500a9d094f61dff6cf GIT binary patch literal 34249 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 literal 0 HcmV?d00001 diff --git a/img3.jpg b/img3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ac9828bf309046d1bd3bc56ce7eb81f8a26b4e4 GIT binary patch literal 34051 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 literal 0 HcmV?d00001 diff --git a/test3.py b/test3.py new file mode 100644 index 0000000..f354af8 --- /dev/null +++ b/test3.py @@ -0,0 +1,180 @@ +# import the necessary packages +from scipy.spatial import distance as dist +from imutils import perspective +from imutils import contours +import numpy as np +import argparse +import imutils +import cv2 +import math + +itemw = 0 +itemh = 0 + + +def midpoint(ptA, ptB): + return ((ptA[0] + ptB[0]) * 0.5, (ptA[1] + ptB[1]) * 0.5) + +def sizeVexScrew(iteml): + # Screw Sizing code + # subtract screw head size to find thread length + shead = 0.09 + iteml -= shead + #print("Thread Length: " + str(iteml)) + iteml *= 8 + iteml = round(iteml) + iteml /= 8 + return iteml + + +# construct the argument parse and parse the arguments +ap = argparse.ArgumentParser() +ap.add_argument("-i", "--image", required=True, + help="path to the input image") +ap.add_argument("-w", "--width", type=float, required=True, + help="width of the left-most object in the image (in inches)") +ap.add_argument("-n", "--number", type=int, required=False, + help="object # to measure (from left to right)") +ap.add_argument("-s", "--show", type=bool, required=False, + help="show on the screen") +args = vars(ap.parse_args()) + +selected = 2 +if type(args["number"]) == type(selected): + selected = args["number"] + +# load the image, convert it to grayscale, and blur it slightly +image = cv2.imread(args["image"]) +gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) +gray = cv2.GaussianBlur(gray, (7, 7), 0) + + +# perform edge detection, then perform a dilation + erosion to +# close gaps in between object edges +edged = cv2.Canny(gray, 50, 100) +edged = cv2.dilate(edged, None, iterations=1) +edged = cv2.erode(edged, None, iterations=1) +if args["show"] == True: + cv2.imshow("Image", edged) + cv2.waitKey(0) +# find contours in the edge map +cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, + cv2.CHAIN_APPROX_SIMPLE) +cnts = imutils.grab_contours(cnts) + +# sort the contours from left-to-right and initialize the +# 'pixels per metric' calibration variable +(cnts, _) = contours.sort_contours(cnts) +pixelsPerMetric = None +num = 0 +# loop over the contours individually +for c in cnts: + num += 1 + # if the contour is not sufficiently large, ignore it + if cv2.contourArea(c) < 100: + continue + # compute the rotated bounding box of the contour + orig = image.copy() + + box = cv2.minAreaRect(c) + box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box) + box = np.array(box, dtype="int") + + # order the points in the contour such that they appear + # in top-left, top-right, bottom-right, and bottom-left + # order, then draw the outline of the rotated bounding + # box + box = perspective.order_points(box) + cv2.drawContours(orig, [box.astype("int")], -1, (0, 255, 0), 2) + + # loop over the original points and draw them + for (x, y) in box: + cv2.circle(orig, (int(x), int(y)), 5, (0, 0, 255), -1) + + # unpack the ordered bounding box, then compute the midpoint + # between the top-left and top-right coordinates, followed by + # the midpoint between bottom-left and bottom-right coordinates + (tl, tr, br, bl) = box + (tltrX, tltrY) = midpoint(tl, tr) + (blbrX, blbrY) = midpoint(bl, br) + + # compute the midpoint between the top-left and top-right points, + # followed by the midpoint between the top-righ and bottom-right + (tlblX, tlblY) = midpoint(tl, bl) + (trbrX, trbrY) = midpoint(tr, br) + + # draw the midpoints on the image + cv2.circle(orig, (int(tltrX), int(tltrY)), 5, (255, 0, 0), -1) + cv2.circle(orig, (int(blbrX), int(blbrY)), 5, (255, 0, 0), -1) + cv2.circle(orig, (int(tlblX), int(tlblY)), 5, (255, 0, 0), -1) + cv2.circle(orig, (int(trbrX), int(trbrY)), 5, (255, 0, 0), -1) + + # draw lines between the midpoints + cv2.line(orig, (int(tltrX), int(tltrY)), (int(blbrX), int(blbrY)), + (255, 0, 255), 2) + cv2.line(orig, (int(tlblX), int(tlblY)), (int(trbrX), int(trbrY)), + (255, 0, 255), 2) + + # unpack the ordered bounding box, then compute the midpoint + # between the top-left and top-right coordinates, followed by + # the midpoint between bottom-left and bottom-right coordinates + (tl, tr, br, bl) = box + (tltrX, tltrY) = midpoint(tl, tr) + (blbrX, blbrY) = midpoint(bl, br) + + # compute the midpoint between the top-left and top-right points, + # followed by the midpoint between the top-righ and bottom-right + (tlblX, tlblY) = midpoint(tl, bl) + (trbrX, trbrY) = midpoint(tr, br) + + # draw the midpoints on the image + cv2.circle(orig, (int(tltrX), int(tltrY)), 5, (255, 0, 0), -1) + cv2.circle(orig, (int(blbrX), int(blbrY)), 5, (255, 0, 0), -1) + cv2.circle(orig, (int(tlblX), int(tlblY)), 5, (255, 0, 0), -1) + cv2.circle(orig, (int(trbrX), int(trbrY)), 5, (255, 0, 0), -1) + + # draw lines between the midpoints + cv2.line(orig, (int(tltrX), int(tltrY)), (int(blbrX), int(blbrY)), + (255, 0, 255), 2) + cv2.line(orig, (int(tlblX), int(tlblY)), (int(trbrX), int(trbrY)), + (255, 0, 255), 2) + # compute the Euclidean distance between the midpoints + dA = dist.euclidean((tltrX, tltrY), (blbrX, blbrY)) + dB = dist.euclidean((tlblX, tlblY), (trbrX, trbrY)) + + # if the pixels per metric has not been initialized, then + # compute it as the ratio of pixels to supplied metric + # (in this case, inches) + if pixelsPerMetric is None: + pixelsPerMetric = dB / args["width"] + # compute the size of the object + dimA = dA / pixelsPerMetric + dimB = dB / pixelsPerMetric + + if num == selected: + itemw = dimA + itemh = dimB + if itemw >= itemh: + iteml = itemw + else: + iteml = itemh + print("Screw Length (RAW): " + str(iteml)) + iteml = sizeVexScrew(iteml) + print("Rounded Length: " + str(iteml)) + # draw the object sizes on the image + if args["show"] == True: + cv2.putText(orig, "{:.5f}in".format(dimA), + (int(tltrX - 15), int(tltrY - 10)), cv2.FONT_HERSHEY_SIMPLEX, + 0.65, (255, 255, 255), 2) + cv2.putText(orig, "{:.5f}in".format(dimB), + (int(trbrX + 10), int(trbrY)), cv2.FONT_HERSHEY_SIMPLEX, + 0.65, (255, 255, 255), 2) + + # show the output image + cv2.imshow("Image", orig) + cv2.waitKey(0) + + +# Screw Sizing + +