error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::convexHull'
error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::convexHull'
我正在尝试获取使用开放姿势检测到的点的像素坐标值。有人能告诉我这是识别像素坐标的正确方法吗,还是有任何其他特定方法来获取下图中表示为 2 和 5 的像素坐标?
代码:
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)
错误:
Traceback (most recent call last): File "OpenPoseImage.py", line 92,
in
rc = cv2.minAreaRect(partA) cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\convhull.cpp:137:
error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth
== CV_32S) in function 'cv::convexHull'
如果你只想获取使用开放姿势检测到的点的像素坐标值,即图像中的白点,那么你可以使用以下代码:
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)
上述代码中,只检测外接圆半径大于2小于4的像素点。
我正在尝试获取使用开放姿势检测到的点的像素坐标值。有人能告诉我这是识别像素坐标的正确方法吗,还是有任何其他特定方法来获取下图中表示为 2 和 5 的像素坐标?
代码:
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)
错误:
Traceback (most recent call last): File "OpenPoseImage.py", line 92, in rc = cv2.minAreaRect(partA) cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\convhull.cpp:137: error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth == CV_32S) in function 'cv::convexHull'
如果你只想获取使用开放姿势检测到的点的像素坐标值,即图像中的白点,那么你可以使用以下代码:
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)
上述代码中,只检测外接圆半径大于2小于4的像素点。