0

我正在尝试通过 otsu 方法将斑马线图像转换为二进制图像。起初我计算了文件夹中所有斑马线图像的阈值,然后将其附加到一个名为的列表中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)

输出

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

4

0 回答 0