Python OpenCV中未维护图像序列
使用OpenCV,我读取了一个文件夹的所有图像,然后将其转换为灰度,然后将所有转换后的图像保存到一个新文件夹中,该文件夹名为Python OpenCV中未维护图像序列,python,opencv,glob,Python,Opencv,Glob,使用OpenCV,我读取了一个文件夹的所有图像,然后将其转换为灰度,然后将所有转换后的图像保存到一个新文件夹中,该文件夹名为“binary image”。但是,当我再次读取“binary image”文件夹中的所有图像以显示直方图时,则“binary image”文件夹中的一系列图像无法保持。直方图显示的是文件夹中的第19号图像,而不是第12号图像。但是柱状图的总数和它应该的一样好。如何维护图像序列 我如何阅读图像: images1=[cv2.imread(file) for file in g
“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_图像文件夹,在那里像我前面提到的那样对图像进行了排序。但是直方图是随机显示的。好的,这里有个问题。使用glob.glob()时,
文件名没有特定的顺序。也就是说,除非您自己对它们进行排序或对顺序做一些处理,否则不能假定文件001.jpg
位于002.jpg
之前
因此,当您枚举(images1)
时,结果将与您描述的一样。数字和文件名不匹配
最简单的方法是将sorted()
添加到文件列表中:
images1=[cv2.imread(file) for file in sorted(glob.glob(r"C:\Users\..."))]
但是,这假设您的文件已正确编号,其间没有丢失任何文件,例如006
,然后010
与007
,008
和009
丢失
更新:一旦我看到文件名:
0.jpg,1.jpg
我马上知道问题出在哪里了。文件名按字典顺序排序,即1、10、11、12、。。。2,20,21,22--我希望你明白我的意思
命名文件时,请添加前导零,它们的存在是有原因的,以保持文件的顺序,而不是:
plt.savefig(dir1+"\\"+str(i)+".png")
使用:
你怎么救他们?@lenik请查查!我已经修改了帖子。@imtinan请在问题中添加您拥有的输入和输出文件名的示例列表以及您想要拥有的输出文件名?这将大大简化事情。谢谢请检查@lenik
plt.savefig(os.path.join( dir1, "%06d.png" % i))