python opencv 输入二值图像为img 通过自适应阈值化得到thresh for contour in invalid_contours: 如何令轮廓在thresh的位置为黑色
时间: 2024-02-27 16:59:18 浏览: 139
Python+OpenCV图像处理——图像二值化的实现
你可以使用cv2.drawContours()函数将指定的轮廓绘制在阈值化后的图像上,然后通过对这个绘制了轮廓的图像取反来得到你需要的结果。具体的实现步骤如下:
1. 对原图像进行自适应阈值化,得到二值化图像thresh,可以使用cv2.adaptiveThreshold()函数实现,代码如下:
```
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
```
2. 对阈值化后的图像进行轮廓检测,同样可以使用cv2.findContours()函数实现,代码如下:
```
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
```
3. 将轮廓绘制在阈值化后的图像上,并对图像取反,代码如下:
```
for contour in contours:
cv2.drawContours(thresh, [contour], 0, (255, 255, 255), thickness=-1)
thresh = cv2.bitwise_not(thresh)
```
这样,你就可以得到轮廓在阈值化后的位置为黑色的图像了。完整的代码示例如下:
```
import cv2
# 读取二值图像
img = cv2.imread('binary_image.png', cv2.IMREAD_GRAYSCALE)
# 自适应阈值化
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# 找到轮廓,并将轮廓绘制在阈值化后的图像上,并对图像取反
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
cv2.drawContours(thresh, [contour], 0, (255, 255, 255), thickness=-1)
thresh = cv2.bitwise_not(thresh)
# 显示结果
cv2.imshow('Result', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文