python - 使用 OpenCV detectorMultiScale 查找最大的矩形

标签 python numpy opencv computer-vision artificial-intelligence

我正在开展一个关于鸟类的项目,需要我检测杂草。我已经编写了下面的程序 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/

相关文章:

python - 在 python2 与 python3 中映射

opencv - 将 OpenCV 姿态估计应用于 Blender 相机

c++ - 获取 cv::Mat 的值

python - 当 OpenCV 检测到正图像时,处理时间非常长

python - 使用用户输入的索引调用函数

python - 有没有用 wxPython 开发过流行的桌面应用程序?

python - 128 位整数哈希函数

python - 列向量和矩阵之间的区别

python - 在python3.2中等待一段时间再执行下一段代码

python - numpy `rint` 奇怪的行为