目录
在图像处理中面对大量的图像,里边可能存在个别损坏的图像,本博文主要使用C#进行损坏图像识别,如下图:
1 获取当前目录下所有文件
/// <summary>
/// 迭代获取选择指定文件夹下的所有文件名
/// </summary>
/// <param name="srcDir">文件目录</param>
/// <param name="selFileNames">文件名存储列表</param>
public void getAllFileNames(string srcDir, List<string> selFileNames)
{
string[] dirs = Directory.GetDirectories(srcDir);
selFileNames.AddRange(Directory.GetFiles(srcDir));
foreach(string dir in dirs)
{
getAllFileNames(dir, selFileNames);
}
}
2 逐个检查名称列表中的图片
BitMap支持的文件格式:
/// <summary>
/// 对列表中图片文件进行检查
/// </summary>
/// <param name="liFileFullName">图片文件列表</param>
/// <param name="sw">输出流</param>
public void CheckFile(List<string> liFileFullName, StreamWriter sw)
{
foreach (string fileFullName in liFileFullName)
{
if (fileFullName.Contains("jpg") ||
fileFullName.Contains("bmp") ||
fileFullName.Contains("gif"))
{
try
{
Bitmap bmp = new Bitmap(fileFullName);
if (bmp == null)
{
sw.WriteLine(fileFullName);
}
}
catch (Exception ex)
{
//图片损坏输出到日志
sw.WriteLine(fileFullName);
}
}
}
}
3 调用
/// <summary>
/// 检查
/// </summary>
/// <param name="srcDir"></param>
/// <param name="ouTxt"></param>
public void check(string srcDir, string ouTxt)
{
StreamWriter sw = new StreamWriter(ouTxt);
List<string> allFileNames = new List<string>();
getAllFileNames(srcDir, allFileNames);
CheckFile(allFileNames, sw);
sw.Close();
sw.Dispose();
}
结果: