gpt4 book ai didi

python - 镜像序列在OpenCV中不维护

转载 作者:行者123 更新时间:2023-12-02 17:21:18 24 4
gpt4 key购买 nike

使用OpenCV,我已经阅读了文件夹的所有图像,然后将其转换为灰度,然后将所有转换后的图像保存到名为"binary image"的新文件夹中。但是,当我再次读取"binary image"文件夹中的所有图像以显示直方图时,"binary image"文件夹中的图像序列将无法维护。直方图显示的是文件夹中第19个图像,而不是第12个图像。但是直方图的总数应该是正确的。如何维护图像序列?

我如何阅读图像:

images1=[cv2.imread(file) for file in glob.glob(r"C:\Users\USER\Handcrafted dataset\binary_image/*.jpg")]

多数民众赞成在我如何保存直方图图像:
 dir1=r"C:\Users\USER\Handcrafted dataset\histogram"
for i,img in enumerate(images1):
plt.figure(figsize=(5,5))
plt.hist(img.ravel(),256,[0,256],label=str(np.mean(img)))
plt.legend(loc="upper right")
plt.savefig(dir1+"\\"+str(i)+".png")
print(i)

plt.show()

保存灰度图像:
di=r"C:\Users\USER\Handcrafted dataset\binary_image"
for i,img in enumerate(images):
img = rgb2gray(img)
plt.figure(figsize=(5,5))
print(i)
plt.imshow(img ,cmap='gray')
io.imsave(di+"\\"+str(i)+".jpg",img)

最初,当我读取图像时,图像名称是随机的,但是在转换为灰度后,我将图像保存在 "binary image"文件夹中,从0重命名为51。这意味着 0.jpg, 1.jpg串行。在此之后,为了显示直方图,我使用了binay_image文件夹,其中的图像按照我之前提到的进行排序。但直方图随机显示。

最佳答案

好,这是一个问题。使用glob.glob()时,文件名没有特定的顺序。也就是说,除非您自己对它们进行排序或对顺序进行某些操作,否则不能假定文件001.jpg位于002.jpg之前。

因此,当您使用enumerate(images1)时-结果将与您描述的一样。数字和文件名不匹配。

您可以执行的最简单的操作是将sorted()添加到文件列表中:

images1=[cv2.imread(file) for file in sorted(glob.glob(r"C:\Users\..."))]

但是,这假定您的文件已正确编号,而中间没有文件丢失,例如 006010,而 007008009丢失。

更新:一旦我看到文件名: 0.jpg, 1.jpg我立即知道问题出在哪里。文件名按字典顺序排序,即1、10、11、12,... 2、20、21、22-希望你能理解...

在命名文件时,请添加前导零,这是有原因的,以使文件保持顺序,而不是:
plt.savefig(dir1+"\\"+str(i)+".png")

使用:
plt.savefig(os.path.join( dir1, "%06d.png" % i))

关于python - 镜像序列在OpenCV中不维护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62103874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com