我正在开展一个关于鸟类的项目,需要我检测杂草。我已经编写了下面的程序 code2 并且它可以工作。然而,我需要在图像上显示最大的矩形。我尝试使用code1来实现这一点,但是,当我在code2中使用这段代码时,它给出了错误:
"line 21 for (x, y, w, h) in biggest: TypeError: cannot unpack non-iterable numpy.int32 object".
我不知道如何解决它。请帮助我,谢谢!
代码1
areas = [w*h for x,y,w,h in birds]
a_biggest = np.argmax(areas)
biggest = birds[a_biggest]
代码2
import cv2
import numpy as np
bird_cascade = cv2.CascadeClassifier("birdcascadeHAAR.xml")
gray = cv2.imread("trialpic30.jpg", 0)
birds, rejectLevels, levelWeights = bird_cascade.detectMultiScale3(
gray,
scaleFactor=1.185,
minNeighbors=20,
outputRejectLevels = True
)
print(rejectLevels)
print(levelWeights)
for (x,y,w,h) in birds:
cv2.rectangle(gray, (x,y), (x+w, y+h), (255,0,0), 2)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(gray, str(levelWeights), (x+w-115, y+h-115), font, 0.5, (255, 0, 0), 1, cv2.LINE_AA)
cv2.imshow("img", gray)
cv2.waitKey()
最佳答案
使用
biggest = birds[a_biggest]
biggest = [922 551 322 322]
你从列表中获取一个元素,但你不再有列表了,所以你应该直接解压它
x, y, w, h = biggest
x, y, w, h = [922 551 322 322]
最终您必须使用这个单个元素[biggest]
创建列表才能与循环一起使用
for x, y, w, h in [biggest]:
for x, y, w, h in [ [922 551 322 322] ]:
<小时/>
当您将单个元素与for
-loop一起使用时
for x, y, w, h in biggest:
然后你就会得到类似的东西
for x, y, w, h in [922 551 322 322]:
因此它从列表中获取第一个元素[922 551 322 322]
(即922
)并尝试进行分配
x, y, w, h = 922
这会带来问题
关于python - 使用 OpenCV detectorMultiScale 查找最大的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59491111/