无法使用大津阈值转换为二进制图像

2024-10-05 14:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试通过大津方法将斑马线图像转换为二值图像。首先,我计算了文件夹中所有斑马线图像的阈值,然后将其附加到名为th_li=[]的列表中

import cv2 as cv
from skimage.filters import threshold_otsu

dir3=r"C:\Users\USER\Handcrafted dataset\bw"
images3=[cv2.imread(file,cv2.IMREAD_GRAYSCALE) for file in sorted(glob.glob(r"C:\Users\USER\Handcrafted dataset\adaptive/*.jpg"))]
th_li=[]
for i,img in enumerate(images3):
    thresh = threshold_otsu(img)
    th_li.append(thresh)

之后,使用两个for循环,我将图像的所有像素值与相应的阈值进行比较。如果像素值小于阈值,我将其设置为0,否则255。 然后我打印了图像数组,显示数组只包含两个值0255。然后将图像保存到另一个文件夹。而不是显示binary image图像看起来像yellowish。但在文件夹中保存的图像是二进制的。另一个问题是,当我再次打印二进制图像时,它包含除0255之外的值

images4=[cv2.imread(file,cv2.IMREAD_GRAYSCALE) for file in sorted(glob.glob(r"C:\Users\USER\Handcrafted dataset\adaptive/*.jpg"))]

for k,img in enumerate(images4):

    for i in range(0,int(img.shape[0])):
        for j in range(0,int(img.shape[1])):
            if img[i][j]<int(th_li[k]):
                img[i][j]=0
            else:
                img[i][j]=255
    print(img)
    plt.figure(figsize=(8,5))
    plt.imshow(img)
    cv2.imwrite(dir3+"\\"+ "%06d.jpg" % k,img)

output

之后,当我再次阅读图像时,它显示数组没有改变,所有内容都保持不变


Tags: in图像文件夹imgfor阈值licv2