用Python写一个回答下述问题一个小组上传一份答案: 1图中几个轮廓的编号分别是多少? 2请解释返回值hierarchy的具体含义。 3对第1个轮廓用127灰色进行填充。
对于这个问题,我们需要使用OpenCV库来处理图像。
- 图中几个轮廓的编号分别是多少?
我们可以使用OpenCV的函数findContours来找到图像中的轮廓,并使用drawContours函数将轮廓画出来。
以下是代码示例:
import cv2
# 读入图像并转为灰度图像
img = cv2.imread("image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对图像进行二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 找到轮廓并绘制出来
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示图像
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行代码后,我们可以看到图像中有4个轮廓,它们的编号分别为0、1、2、3(从左到右,从上到下)。
- 请解释返回值hierarchy的具体含义。
findContours函数的第二个返回值hierarchy是一个包含每个轮廓信息的数组。具体来说,hierarchy的每一行包含四个整数值,分别为[Next, Previous, First_Child, Parent]。
- Next:表示下一个轮廓的索引,如果没有则为-1。
- Previous:表示前一个轮廓的索引,如果没有则为-1。
- First_Child:表示第一个子轮廓的索引,如果没有则为-1。
- Parent:表示父轮廓的索引,如果没有则为-1。
- 对第1个轮廓用127灰色进行填充。
我们可以使用函数cv2.drawContours来对轮廓进行填充。以下是代码示例:
import cv2
# 读入图像并转为灰度图像
img = cv2.imread("image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对图像进行二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 找到轮廓并绘制出来
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, 0, (127, 127, 127), -1)
# 显示图像
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行代码后,我们可以看到第1个轮廓被填充为灰色。
原文地址: https://www.cveoy.top/t/topic/bnF3 著作权归作者所有。请勿转载和采集!