无法在 OpenCV 中显示轮廓周围的边界矩形 (Python)
Unable to display bounding rectangles around contours in OpenCV (Python)
我已经编写了这段代码来围绕图像中绘制的轮廓绘制矩形框,但是在 运行 上,除了我根本看不到的框之外,我得到了所有正确的东西。错误是什么?
for cnt,heir in zip(contours, hierarchy):
(x,y,w,h) = cv2.boundingRect(cnt);
cv2.rectangle(im2,(x,y),(x+w,y+h),(0,255,0),2)
cv2.drawContours(im2, contours, -1, (255,255,255), 2);
cv2.imshow("Contours",im2);
PS。我使用 OpenCV 3.1.0 和 Python 2.7
编辑: 我尝试遍历每个轮廓,为了检查它我修改了代码如下:
for cnt,heir in zip(contours, hierarchy):
print ('Contour Area:',cv2.contourArea(cnt));
(x,y,w,h) = cv2.boundingRect(cnt);
print (x,y,h,w)
cv2.putText(im2,'worm',(x+w,y+h), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2, cv2.LINE_AA);
cv2.rectangle(im2,(x,y),(x+w,y+h),(255,0,0),2);
我打印了每个轮廓区域,每个轮廓的 (x,y,w,h) 值,并为每个轮廓放置文本 "worm",并在每个轮廓周围绘制矩形框。但是我只得到 1 个输出:
对于像这样的图像:
我需要在每个类似蠕虫的生物上显示文本 "worm"。但是我只得到一次。有什么问题?
我曾经使用下面的代码在检测到的轮廓上绘制矩形。希望对你有帮助。
for contour in contours:
# get rectangle bounding contour
[x,y,w,h] = cv2.boundingRect(contour)
# draw rectangle around contour on original image
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,255),2)
简单写:
for c in contours:
(x,y,w,h) = cv2.boundingRect(c);
cv2.putText(im2,'worm',(x+w,y+h), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2, cv2.LINE_AA);
cv2.rectangle(im2,(x,y),(x+w,y+h),(255,0,0),2);
cv2.drawContours(im2, contours, -1, (255,255,255), 2);
cv2.imshow("Contours",im2);
根据 furas 的建议,zip(contours,hierarchy) 将 return 只有一对,如果 hierarchy 只有一对。在这种情况下,对 contours 列表进行简单循环即可。
我已经编写了这段代码来围绕图像中绘制的轮廓绘制矩形框,但是在 运行 上,除了我根本看不到的框之外,我得到了所有正确的东西。错误是什么?
for cnt,heir in zip(contours, hierarchy):
(x,y,w,h) = cv2.boundingRect(cnt);
cv2.rectangle(im2,(x,y),(x+w,y+h),(0,255,0),2)
cv2.drawContours(im2, contours, -1, (255,255,255), 2);
cv2.imshow("Contours",im2);
PS。我使用 OpenCV 3.1.0 和 Python 2.7
编辑: 我尝试遍历每个轮廓,为了检查它我修改了代码如下:
for cnt,heir in zip(contours, hierarchy):
print ('Contour Area:',cv2.contourArea(cnt));
(x,y,w,h) = cv2.boundingRect(cnt);
print (x,y,h,w)
cv2.putText(im2,'worm',(x+w,y+h), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2, cv2.LINE_AA);
cv2.rectangle(im2,(x,y),(x+w,y+h),(255,0,0),2);
我打印了每个轮廓区域,每个轮廓的 (x,y,w,h) 值,并为每个轮廓放置文本 "worm",并在每个轮廓周围绘制矩形框。但是我只得到 1 个输出:
对于像这样的图像:
我需要在每个类似蠕虫的生物上显示文本 "worm"。但是我只得到一次。有什么问题?
我曾经使用下面的代码在检测到的轮廓上绘制矩形。希望对你有帮助。
for contour in contours:
# get rectangle bounding contour
[x,y,w,h] = cv2.boundingRect(contour)
# draw rectangle around contour on original image
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,255),2)
简单写:
for c in contours:
(x,y,w,h) = cv2.boundingRect(c);
cv2.putText(im2,'worm',(x+w,y+h), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2, cv2.LINE_AA);
cv2.rectangle(im2,(x,y),(x+w,y+h),(255,0,0),2);
cv2.drawContours(im2, contours, -1, (255,255,255), 2);
cv2.imshow("Contours",im2);
根据 furas 的建议,zip(contours,hierarchy) 将 return 只有一对,如果 hierarchy 只有一对。在这种情况下,对 contours 列表进行简单循环即可。