python - विभिन्न OpenCV संस्करणों में `cv2.findContours` का उपयोग कैसे करें?



numpy opencv-contour (1)

मैं रास्पबेरी पाई कैमरे से लाइव वीडियो फीड में वर्गों का पता लगाने के लिए पायथन के साथ ओपनसीवी का उपयोग करने की कोशिश कर रहा हूं। हालाँकि, नीचे दिए गए कोड में cv2.GaussianBlur और cv2.Canny फ़ंक्शन निम्न त्रुटि का कारण बन रहे हैं: "TypeError: numpy.ndarray 'ऑब्जेक्ट कॉल करने योग्य नहीं है"

मैं त्रुटि को हल करने के लिए प्रतीत नहीं कर सकता। किसी भी मदद की सराहना की है।

https://www.pyimagesearch.com/2015/05/04/target-acquired-finding-targets-in-drone-and-quadcopter-video-streams-using-python-and-opencv/#comment-446639 से लिया गया कोड https://www.pyimagesearch.com/2015/05/04/target-acquired-finding-targets-in-drone-and-quadcopter-video-streams-using-python-and-opencv/#comment-446639

import cv2

# load the video
camera = cv2.VideoCapture(0)

# keep looping
while True:
  # grab the current frame and initialize the status text
  (grabbed, frame) = camera.read()
  status = "No Targets"

  # check to see if we have reached the end of the
  # video
  if not grabbed:
     break

  # convert the frame to grayscale, blur it, and detect edges
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  blurred = cv2.GaussianBlur(gray, (7, 7), 0)
  edged = cv2.Canny(blurred, 50, 150)

  # find contours in the edge map
  (cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,
     cv2.CHAIN_APPROX_SIMPLE)

  # loop over the contours
  for c in cnts:
    # approximate the contour
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.01 * peri, True)

    # ensure that the approximated contour is "roughly" rectangular
    if len(approx) >= 4 and len(approx) <= 6:
        # compute the bounding box of the approximated contour and
        # use the bounding box to compute the aspect ratio
        (x, y, w, h) = cv2.boundingRect(approx)
        aspectRatio = w / float(h)

        # compute the solidity of the original contour
        area = cv2.contourArea(c)
        hullArea = cv2.contourArea(cv2.convexHull(c))
        solidity = area / float(hullArea)

        # compute whether or not the width and height, solidity, and
        # aspect ratio of the contour falls within appropriate bounds
        keepDims = w > 25 and h > 25
        keepSolidity = solidity > 0.9
        keepAspectRatio = aspectRatio >= 0.8 and aspectRatio <= 1.2

        # ensure that the contour passes all our tests
        if keepDims and keepSolidity and keepAspectRatio:
            # draw an outline around the target and update the status
            # text
            cv2.drawContours(frame, [approx], -1, (0, 0, 255), 4)
            status = "Target(s) Acquired"

        # draw the status text on the frame
    cv2.putText(frame, status, (20, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
    (0, 0, 255), 2)

  # show the frame and record if a key is pressed
  cv2.imshow("Frame", frame)
  key = cv2.waitKey(1) & 0xFF

  # if the 'q' key is pressed, stop the loop
  if key == ord("q"):
     break

# cleanup the camera and close any open windows
camera.release()
cv2.destroyAllWindows()

2.x x 3.x is 4.x के साथ काम करने का एक विकल्प है:

cnts, hiers = cv2.findContours(...)[-2:]

सूचना:

OpenCV 3.x बाद से cv2.findContours बदल गया है, लेकिन OpenCV 4.0 यह वापस बदल जाता है !!!

OpenCV 3.4 में:

findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy

OpenCV 4.0 में:

findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy





opencv-contour