c++获取图片的位置信息

news/2024/7/21 5:40:23 标签: c++, qt, 图像处理

EasyEXIF 简介:
     EasyEXIF 是一个小巧轻量级的C++库,用于解析 JPEG 文件中的基本信息。
在项目只需要两个文件 exif.cpp、exif.h,不依赖于任何构建系统或外部库。

使用功能easyexif库获取图片的经纬度信息接口:

void  getPositionInfo(char* photoPath,double &latitude,double &longitude,unsigned char &latDirection,unsigned char &lonDirection)
{
    FILE *fp = fopen(photoPath,"rb");
    if(!fp)
    {
        printf("can not open photoPath:%s\n",photoPath);
        exit(-1);
    }
    fseek(fp,0,SEEK_END);
    unsigned long fileSize = ftell(fp);
    rewind(fp);
    unsigned char *buf = new unsigned char[fileSize];
    if(fread(buf,1,fileSize,fp) != fileSize)
    {
        printf("can not read photoPath:%s\n",photoPath);
        delete [] buf;
        exit(-1);
    }
    fclose(fp);

    //Parse EXIF
    easyexif::EXIFInfo result;
    int code = result.parseFrom(buf,fileSize);
    delete[] buf;
    if(code && code != 1983)
    {
        printf("parse EXIF INFO error,code %d\n",code);
        exit(-1);
    }
    if(code == 1983)
    {
        //维度
        latitude = 0;
        latDirection = 'N';
        //经度
        longitude = 0;
        lonDirection = 'E';
        return;
    }
    //维度
    latitude = result.GeoLocation.Latitude;
    latDirection = result.GeoLocation.LatComponents.direction;
    //经度
    longitude = result.GeoLocation.Longitude;
    lonDirection = result.GeoLocation.LonComponents.direction;

    if(latDirection != 'N' && latDirection != 'S')
        latDirection = 'N';
    if(lonDirection != 'E' && lonDirection != 'W')
        lonDirection = 'E';

    printf("GPS Latitude: %f deg (%f deg, %f min, %f sec %c)\n",
               result.GeoLocation.Latitude, result.GeoLocation.LatComponents.degrees,
               result.GeoLocation.LatComponents.minutes,
               result.GeoLocation.LatComponents.seconds,
               result.GeoLocation.LatComponents.direction);
    printf("GPS Longitude: %f deg (%f deg, %f min, %f sec %c)\n",
               result.GeoLocation.Longitude, result.GeoLocation.LonComponents.degrees,
               result.GeoLocation.LonComponents.minutes,
               result.GeoLocation.LonComponents.seconds,
               result.GeoLocation.LonComponents.direction);
}

参数说明:
photoPath:文件的全路径
latitude:维度数值,单位°
longitude:经度数值,单位°
latDirection:维度方向:N/S
lonDirection:经度方向:E/W


http://www.niftyadmin.cn/n/5095331.html

相关文章

每天五分钟机器学习:如何解决过拟合问题?

本文重点 过拟合是机器学习中常见的问题之一,它指的是模型在训练集上表现良好,但在测试集或新数据上表现不佳的情况。过拟合的原因是模型过于复杂,过度拟合了训练集的噪声和细节,导致泛化能力下降。 解决方案 1. 数据集扩充:增加更多的训练样本可以减少过拟合的风险。通…

logback服务器日志删除原理分析

查看以下的logback官方文档 Chapter 4: Appendershttps://logback.qos.ch/manual/appenders.html 按文档说明,maxHistory是设置保存归档日志的最大数量,该数量的单位受到fileNamePattern里的值%d控制,如果有多个%d,只能有一个主%d&#xff0…

根据脑图谱获取感兴趣区域的mask

根据脑图谱获取感兴趣区域的mask 1,引入1.1 ASPECT-Atlas 2,获取脑图谱感兴趣区域mask参考: 1,引入 脑影像分析中,我们常常会针对性的对某些感兴趣区域进行分析,而对它们进行分析的前提是获取该区域的mask…

样式穿透 >>>、/deep/ 、::v-deep 、:deep(<inner-selector>)应用场景

1. >>> 用于原生 CSS 样式穿透 #box >>> .header {width: 100%;height: 200px; }2. /deep/ 如果项目使用了预处理器 scss 、less 等 css 预处理器,则可以使用 /deep/ 注意:vue-cli3以上版本不可以 #box /deep/ .header {width: 10…

万界星空科技/生产制造执行MES系统/开源MES/免费MES

开源系统概述: 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、免费数字化大屏。 万界星空开源MES制造执行系统的Java开源版本。开源mes…

常用的DOS命令有哪些?

DOS(Disk Operating System)是一种早期的操作系统,具有一系列的命令行命令,用于管理文件、运行程序和执行各种操作。以下是一些常用的DOS命令: dir:列出当前目录中的文件和子目录。cd:改变当前…

VS2010 C语言内嵌汇编语言程序

VS2010 C语言内嵌汇编语言程序 2021年7月28日席锦 在visual studio 2010中C语言使用内联汇编写代码 ,它的格式有两种, 一种是__asm 直接接汇编指令语句,比如:__asm int 3 // 软件中断 另一种是加上花括号,类似于一个函数&…

将 vue2+ElementU 项目打包成安卓app

目标:将vue项目打包成安卓app 工具:HbuilderX 1.在HbuilderX中创建一个 5App 项目 创建好的app项目目录 2.将vue项目打包 2.1 在 vue.config.js 中添加公共路径(解决打包后的app图片不显示问题) module.exports defineConfig(…