错误:函数'cv :: convexHull'中的(-215:声明失败)总计> = 0 &&(深度== CV_32F ||深度== CV_32S)

时间:2019-07-13 15:37:23

标签: python opencv error-handling openpose

我正在尝试获取使用打开姿势检测到的点的像素坐标值。有人可以告诉我这是识别像素坐标的正确方法,还是还有其他特定方法可以在下图中获得以2和5表示的像素坐标?

enter image description here

代码:

for pair in POSE_PAIRS:
    partA = pair[0]
    partB = pair[1]
    print("{}".format(partA),"{}".format(partB))

    if partA == 2 and partB == 5:
        print("heere")
        cv2.line(frame, points[partA], points[partB], (0, 0, 0), 2)
        cv2.circle(frame, points[partA], 8, (0, 0, 255), thickness=-1, lineType=cv2.FILLED)
    else :
        cv2.line(frame, points[partA], points[partB], (0, 255, 255), 2)
        cv2.circle(frame, points[partA], 8, (0, 0, 255), thickness=-1, lineType=cv2.FILLED)

rc = cv2.minAreaRect(partA)
box = cv2.boxPoints(rc)
for p in box:
    pt = (p[0],p[1])
    print (pt)

错误:

  

回溯(最近一次通话最后一次):文件“ OpenPoseImage.py”,第92行,   在       rc = cv2.minAreaRect(partA)cv2.error:OpenCV(4.1.0)C:\ projects \ opencv-python \ opencv \ modules \ imgproc \ src \ convhull.cpp:137:   错误:(-215:声明失败)总计> = 0 &&(深度== CV_32F ||深度)   == CV_32S)在函数'cv :: convexHull'中

1 个答案:

答案 0 :(得分:0)

如果您只想获取使用打开姿势检测到的点的像素坐标值,即图像中的白点,则可以使用以下代码:

import cv2
import numpy as np 

# read and scale down image
img = cv2.pyrDown(cv2.imread('hull.jpg', cv2.IMREAD_UNCHANGED))

# threshold image
ret, threshed_img = cv2.threshold(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), 230, 255, cv2.THRESH_BINARY)

# find contours
contours = cv2.findContours(threshed_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]

for c in contours:
    # get the bounding rect
    x, y, w, h = cv2.boundingRect(c)

    # get the min enclosing circle
    (x, y), radius = cv2.minEnclosingCircle(c)

    # convert all values to int
    center = (int(x), int(y))
    radius = int(radius)

    if radius>2 and radius<4:
        print(center)
        img = cv2.circle(img, center, radius, (255, 0, 0), 2)
        cv2.putText(img,'({},{})'.format(int(x), int(y)), (int(x)+5, int(y)+5), cv2.FONT_HERSHEY_SIMPLEX, 0.3,(0,255,0), 1)

cv2.imshow('contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

(208, 418)
(180, 410)
(160, 408)
(208, 326)
(152, 316)
(159, 234)
(200, 234)
(136, 224)
(224, 224)
(232, 163)
(184, 163)
(128, 163)
(200, 112)
(232, 91)
(136, 91)
(176, 61)
(176, 0)

enter image description here

在上面的代码中,仅检测到其圆环半径大于2且小于4的那些像素。