_, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)全黑
时间: 2023-08-30 20:04:11 浏览: 136
如果二值化后的图像全部是黑色,可能是阈值选取不合适造成的。可以尝试修改阈值,使得二值化后的图像符合要求。
另外,如果图像过暗或者过亮,可能也会影响二值化的结果。此时可以尝试对图像进行亮度调整,使得图像的亮度合适。例如,可以使用以下代码将图像亮度增加 50 个单位:
```python
img = np.clip(img + 50, 0, 255).astype(np.uint8)
```
其中,`np.clip()` 函数将图像像素值限制在 0 到 255 之间,`.astype(np.uint8)` 将图像像素值转换为 8 位无符号整数类型。
相关问题
你给的例子出错了 cv2.error: OpenCV(4.0.1) c:\ci\opencv-suite_1573470242804\work\modules\highgui\src\precomp.hpp:131: error: (-215:Assertion failed) src_depth != CV_16F && src_depth != CV_32S in function 'convertToShow'
非常抱歉,我的代码有误。错误出现在将处理后的标签图转换为二值图像的部分,应该使用以下代码:
``` python
# 将处理后的连通区域标签图转换为二值图像
img = np.zeros_like(img)
img[labels > 0] = 255
```
因为在标签图中,非零的像素值对应的是连通区域的标签值,所以在将标签图转换为二值图像时,需要先创建一个与原图像大小相同的全黑图像(即像素值都为0),然后将标签图中非零像素的位置在新图像中赋为255,即可得到二值图像。完整的修改后的代码如下:
``` python
import cv2
import numpy as np
# 读取灰度图像
img = cv2.imread('gray_image.png', cv2.IMREAD_GRAYSCALE)
# 将灰度图像二值化
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 获取连通区域信息
ret, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh, connectivity=8)
# 遍历连通区域
for i in range(1, ret):
# 获取当前连通区域的面积
area = stats[i, cv2.CC_STAT_AREA]
# 如果面积小于4个像素,则将该区域变为黑色
if area < 4:
labels[labels == i] = 0
# 将处理后的连通区域标签图转换为二值图像
img = np.zeros_like(img)
img[labels > 0] = 255
# 显示结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
请再次接受我的歉意,希望这次的答案能够帮助到您。
阅读全文