之前做样本的时候已经写过这部分代码
只不过筛选的是全黑的样本图和其对应的真实影像
那么当真实影像图包含白色图片而且文件名包含中文字符了怎么办
大家知道imread无法读取路径和图片名称含中文字符的图片
那么
if cv2.countNonZero(img) == 0:
这个判断方法也不能使用了
于是这里介绍另外的方法
我使用了
img = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1) # 读入完整图片,见下面解释
来读取图片
那么判断方法是使用了nump里面的函数
如果数组的平均值为255那么图片就是白色的
同样的可以检测黑色或者其他颜色的图片
而且中文命名的图片也没问题
完整代码如下:
# -*- coding: utf-8 -*-
"""
Created on Wed July 19 11:44:46 2022
@author:Laney_Midory
csdn:Laney_Midory
"""
import cv2
import os
from osgeo import gdal
import numpy as np
import shutil
inPath = "C:/Users/Administrator/Desktop/DeepGlobe-Road-Extraction-link34/dataset/v/"
outPath = "C:/Users/Administrator/Desktop/DeepGlobe-Road-Extraction-link34/dataset/valid/"
newPath = "C:/Users/Administrator/Desktop/DeepGlobe-Road-Extraction-link34/dataset/white/"
for f in os.listdir(outPath):
path = outPath + f.strip()
if not os.path.exists(path):
continue;
img = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1) # 读入完整图片,见下面解释
data_encode = np.array(img)
if np.mean(data_encode) == 255:
print("Image is white")
print(path)
print(newPath+f.strip())
shutil.move(path,newPath+f.strip())
print("finish!")