zoukankan      html  css  js  c++  java
  • 图像读取Exif小知识,图像扶正,还原拍摄时的角度

    在做人脸识别的时候发现很多手机拍摄的图像在C#读取之后方向出现了错误,Bitmap中的宽度和实际的windows的文件属性内的参数相反,引起一阵测试和思考,后来百度出来可以用Exif来解决

    github有相关Exif介绍

    https://github.com/dlemstra/Magick.NET/blob/784e23b1f5c824fc03d4b95d3387b3efe1ed510b/Magick.NET/Core/Profiles/Exif/ExifTag.cs

    维基百科也有说明

    https://en.wikipedia.org/wiki/Exif

    实际代码是

    /// <summary>
            /// 根据图片exif调整方向
            /// </summary>
            /// <param name="sm"></param>
            /// <returns></returns>
            public static Bitmap RotateImage(Stream sm)
            {
                Image img = Image.FromStream(sm);
                var exif = img.PropertyItems;
                byte orien = 0;
                var item = exif.Where(m => m.Id == 274).ToArray();
                if (item.Length > 0)
                    orien = item[0].Value[0];
                switch (orien)
                {
                    case 2:
                        img.RotateFlip(RotateFlipType.RotateNoneFlipX);//horizontal flip
                        break;
                    case 3:
                        img.RotateFlip(RotateFlipType.Rotate180FlipNone);//right-top
                        break;
                    case 4:
                        img.RotateFlip(RotateFlipType.RotateNoneFlipY);//vertical flip
                        break;
                    case 5:
                        img.RotateFlip(RotateFlipType.Rotate90FlipX);
                        break;
                    case 6:
                        img.RotateFlip(RotateFlipType.Rotate90FlipNone);//right-top
                        break;
                    case 7:
                        img.RotateFlip(RotateFlipType.Rotate270FlipX);
                        break;
                    case 8:
                        img.RotateFlip(RotateFlipType.Rotate270FlipNone);//left-bottom
                        break;
                    default:
                        break;
                }
                return (Bitmap)img;
            }
  • 相关阅读:
    软件的命名方式
    游戏软件的发展和特点
    第一章 【概论】练习与讨论 第二题
    进行博客博文管理的设计
    可视化编程是否会慢慢取代目前的主流编程
    第二次作业(软件工作量的估记方法)
    第一次作业
    string字符串格式化成time_t,并计算2个time_t的时间差
    CSV简单解析与排序输出
    jqchart总结
  • 原文地址:https://www.cnblogs.com/RainbowInTheSky/p/10297753.html
Copyright © 2011-2022 走看看