我正在尝试通过 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
。然后我打印了图像数组,显示该数组仅包含两个值0
或255
。然后将图像保存到另一个文件夹。而不是显示binary image
图像看起来像yellowish
. 但是在文件夹中保存的图像是二进制的。另一个问题是当我再次打印它包含的值的二进制图像时,除了0
和255
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)
之后,当我再次阅读图像时,它显示数组没有改变,一切都保持不变。