• <legend id='AkTRA'><style id='AkTRA'><dir id='AkTRA'><q id='AkTRA'></q></dir></style></legend>
    <i id='AkTRA'><tr id='AkTRA'><dt id='AkTRA'><q id='AkTRA'><span id='AkTRA'><b id='AkTRA'><form id='AkTRA'><ins id='AkTRA'></ins><ul id='AkTRA'></ul><sub id='AkTRA'></sub></form><legend id='AkTRA'></legend><bdo id='AkTRA'><pre id='AkTRA'><center id='AkTRA'></center></pre></bdo></b><th id='AkTRA'></th></span></q></dt></tr></i><div id='AkTRA'><tfoot id='AkTRA'></tfoot><dl id='AkTRA'><fieldset id='AkTRA'></fieldset></dl></div>

    <tfoot id='AkTRA'></tfoot>
  • <small id='AkTRA'></small><noframes id='AkTRA'>

        • <bdo id='AkTRA'></bdo><ul id='AkTRA'></ul>
      1. 用python删除文件夹中的重复图片(图片去重)

        时间:2023-12-16

          <small id='O72rx'></small><noframes id='O72rx'>

            <i id='O72rx'><tr id='O72rx'><dt id='O72rx'><q id='O72rx'><span id='O72rx'><b id='O72rx'><form id='O72rx'><ins id='O72rx'></ins><ul id='O72rx'></ul><sub id='O72rx'></sub></form><legend id='O72rx'></legend><bdo id='O72rx'><pre id='O72rx'><center id='O72rx'></center></pre></bdo></b><th id='O72rx'></th></span></q></dt></tr></i><div id='O72rx'><tfoot id='O72rx'></tfoot><dl id='O72rx'><fieldset id='O72rx'></fieldset></dl></div>

            <tfoot id='O72rx'></tfoot>
            1. <legend id='O72rx'><style id='O72rx'><dir id='O72rx'><q id='O72rx'></q></dir></style></legend>
                <tbody id='O72rx'></tbody>

                <bdo id='O72rx'></bdo><ul id='O72rx'></ul>

                • 下面是详细讲解用Python删除文件夹中的重复图片(图片去重)的完整攻略。

                  问题描述

                  在某些应用场景中,我们可能需要对一些文件夹中的图片进行去重操作,即删除那些重复的图片,仅保留一份。这样可以减少存储空间的占用,并且更便于后续的处理。

                  解决方案

                  这里我们可以使用Python来实现简便高效的图片去重操作。主要思路是对每个图片计算一个特征值,然后根据特征值来进行比较和去重。

                  具体来说,我们可以使用OpenCV库中提供的算法来生成每个图片的特征值,然后借助Python的set数据结构来实现去重。这一过程可以通过以下几个步骤来完成:

                  1. 导入相应的库文件
                  import os
                  import cv2
                  import hashlib
                  
                  1. 定义计算图片的SHA256值的函数
                  def compute_image_sha256(image_path):
                      with open(image_path, "rb") as f:
                          image_bytes = f.read()
                          sha256 = hashlib.sha256(image_bytes).hexdigest()
                      return sha256
                  
                  1. 定义计算图片特征值的函数
                  def compute_image_feature(image_path):
                      image = cv2.imread(image_path)
                      gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
                      sift = cv2.xfeatures2d.SIFT_create()
                      key_points, descriptors = sift.detectAndCompute(gray_image, None)
                      return descriptors.tobytes()
                  
                  1. 遍历文件夹中的所有图片,计算它们的特征值,并用set数据结构来进行去重
                  def remove_duplicate_images(folder_path):
                      feature_set = set()
                      for root, dirs, files in os.walk(folder_path):
                          for file_name in files:
                              file_path = os.path.join(root, file_name)
                              try:
                                  feature = compute_image_feature(file_path)
                                  if feature not in feature_set:
                                      feature_set.add(feature)
                                  else:
                                      os.remove(file_path)
                                      print(f"Removed duplicate image: {file_path}")
                              except Exception as e:
                                  print(f"Failed to process image: {file_path} ({e})")
                  

                  这个函数会遍历指定文件夹中的所有文件,如果是图片文件,就会计算它的特征值,并用set数据结构来判断是否出现过。如果是首次出现,就将特征值加入到set中;否则,就说明这是一张重复的图片,需要将其删除掉。

                  1. 调用remove_duplicate_images函数来实现图片去重操作
                  folder_path = "/path/to/folder"
                  remove_duplicate_images(folder_path)
                  

                  在这里,只需要将文件夹的路径传入remove_duplicate_images函数即可开始去重操作。

                  示例说明

                  下面是两个示例说明,展示了如何读取图片和如何将结果写入到文件中。

                  示例一:读取图片并显示

                  import cv2
                  
                  image_path = "/path/to/image.jpg"
                  image = cv2.imread(image_path)
                  cv2.imshow("Image", image)
                  cv2.waitKey(0)
                  cv2.destroyAllWindows()
                  

                  通过调用cv2.imread函数来读取指定路径下的图片文件,然后用cv2.imshow函数来显示这张图片。

                  示例二:将结果写入到文件中

                  with open("result.txt", "w") as f:
                      for feature in feature_set:
                          feature_string = ",".join(str(x) for x in feature)
                          f.write(f"{feature_string}\n")
                  

                  在这个示例中,我们创建了一个名为result.txt的文件,并将去重结果写入到这个文件中。我们可以用for循环来遍历feature_set集合,并使用join函数将特征值转化为字符串,然后用write函数将结果写入到文件中。

                  总结

                  通过Python实现图片去重操作可以大大减少存储空间的占用,并更便于后续的处理。具体来说,我们可以使用OpenCV库中提供的算法来生成每个图片的特征值,然后借助Python的set数据结构来实现去重。这一过程可以通过几个简单的步骤来完成,但在实际操作中还需要注意一些细节问题。

                  上一篇:Python线程之定位与销毁的实现 下一篇:500行Python代码打造刷脸考勤系统

                  相关文章

                  1. <tfoot id='8ilMr'></tfoot>

                  2. <i id='8ilMr'><tr id='8ilMr'><dt id='8ilMr'><q id='8ilMr'><span id='8ilMr'><b id='8ilMr'><form id='8ilMr'><ins id='8ilMr'></ins><ul id='8ilMr'></ul><sub id='8ilMr'></sub></form><legend id='8ilMr'></legend><bdo id='8ilMr'><pre id='8ilMr'><center id='8ilMr'></center></pre></bdo></b><th id='8ilMr'></th></span></q></dt></tr></i><div id='8ilMr'><tfoot id='8ilMr'></tfoot><dl id='8ilMr'><fieldset id='8ilMr'></fieldset></dl></div>
                      <bdo id='8ilMr'></bdo><ul id='8ilMr'></ul>

                    1. <small id='8ilMr'></small><noframes id='8ilMr'>

                    2. <legend id='8ilMr'><style id='8ilMr'><dir id='8ilMr'><q id='8ilMr'></q></dir></style></legend>