• 大小: 1.44MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-27
  • 语言: 其他
  • 标签: 图像识别  

资源简介

(OpenCV)图像目标尺寸检测 pyimagesearch技术博客上的一篇文章,《Measuring size of objects in an image with OpenCV》,原文作者:Adrian Rosebrock 。 改代码可直接执行

资源截图

代码片段和文件信息

# USAGE
# python object_size.py --image images/example_01.png --width 0.955
# python object_size.py --image images/example_02.png --width 0.955
# python object_size.py --image images/example_03.png --width 3.5

# 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

def midpoint(ptA ptB):
return ((ptA[0] + ptB[0]) * 0.5 (ptA[1] + ptB[1]) * 0.5)

# 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)“)
args = vars(ap.parse_args())

# 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)

# find contours in the edge map
cnts = cv2.findContours(edged.copy() cv2.RETR_EXTERNAL
cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]

# sort the contours from left-to-right and initialize the
# ‘pixels per metric‘ calibration variable
(cnts _) = contours.sort_contours(cnts)
pixelsPerMetric = None

# loop over the contours individually
for c in cnts:
# 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) 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-03-16 18:54  size-of-objects\
     目录           0  2016-03-11 12:28  size-of-objects\images\
     文件      389285  2016-03-10 14:58  size-of-objects\images\example_01.png
     文件      691806  2016-03-10 16:52  size-of-objects\images\example_02.png
     文件      426623  2016-03-11 11:34  size-of-objects\images\example_03.png
     文件        4150  2016-03-14 14:17  size-of-objects\object_size.py

评论

共有 条评论