寻找图片文件夹

#! python3
# -*- coding:utf-8 -*-
# find_image_folders.py - 扫描整个硬盘,寻找"照片文件夹",
# 假设定义"照片文件夹"就是超过半数文件都是照片的任何文件夹,
# 照片必须是png或jpg文件,照片的宽度和高度必须大于500像素.

import os
from PIL import Image

for foldername, subfolders, filenames in os.walk('C:\\'): # 遍历c盘
	pN = 0		# 记录文件夹中是照片的文件数量
	nPN = 0		# 非照片的文件数量
	
	for filename in filenames:
		filename  = filename.lower()		# 保证扩展名大小写都可以识别
		
		if not (filename.endswith('.png')\
		or filename.endswith('.jpg')):
			nPN += 1						# 如果不是图片文件就其他文件数加1
			continue						# 继续遍历下个文件
		try:	
			im = Image.open(os.path.join(foldername, filename))	# 打开图片文件
			width, height = im.size	
									
			if width > 500 and height > 500:	# 如果图片的宽高都大于500,是照片
				pN += 1
			else:
				nPN += 1
		except OSError:
			continue	# 如果图片无法识别,跳过
		
	if pN > nPN:
		print('照片文件夹: ' + os.path.join(foldername))
		
		
		

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SIFT(Scale-Invariant Feature Transform)是一种特征提取算法,可以在不同的尺度和旋转角度下检测到同一个物体的特征点。使用SIFT匹配算法,可以找到两张照片中相同的特征点,从而实现照片的匹配。 具体步骤如下: 1. 读取文件夹中的所有图片,并将它们转换成灰度图像。 2. 对每张图像提取SIFT特征点,得到每个特征点的描述符。 3. 将两张图片的描述符进行匹配,找到相同的特征点。 4. 根据匹配的特征点计算相似度,选择相似度最高的作为匹配结果。 具体实现可以使用OpenCV库中的函数,示例代码如下: ```python import cv2 import os # 读取文件夹中的所有图片 folder = "path/to/folder" files = os.listdir(folder) images = [] for file in files: if file.endswith(".jpg"): file_path = os.path.join(folder, file) image = cv2.imread(file_path) images.append(cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)) # 初始化SIFT特征提取器 sift = cv2.xfeatures2d.SIFT_create() # 提取特征点和描述符 keypoints = [] descriptors = [] for image in images: kp, des = sift.detectAndCompute(image, None) keypoints.append(kp) descriptors.append(des) # 使用FLANN算法进行特征匹配 FLANN_INDEX_KDTREE = 0 index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5) search_params = dict(checks=50) flann = cv2.FlannBasedMatcher(index_params, search_params) matches = flann.knnMatch(descriptors[0], descriptors[1], k=2) good_matches = [] for m, n in matches: if m.distance < 0.7 * n.distance: good_matches.append(m) # 绘制匹配结果 result = cv2.drawMatches(images[0], keypoints[0], images[1], keypoints[1], good_matches, None, flags=2) cv2.imshow("result", result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,首先读取指定文件夹中的所有图片,并将它们转换成灰度图像。然后使用SIFT特征提取器提取每张图像的特征点和描述符,使用FLANN算法进行特征匹配,并根据匹配结果计算相似度。最终将匹配结果绘制出来并显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值