在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件

这篇具有很好参考价值的文章主要介绍了在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的和思路

一个Vitis IDE 裸机项目,需要将视频帧无损地保存下来

由于每帧的像素数据是 16bit 1通道的 bayer 格式,满足这一需求的图像格式似乎只有 tiff 格式
开源的tiff 库是 libtiff,而在 Vitis IDE 裸机项目中要使用的话就需要交叉编译
Vitis IDE 裸机的cpu是arm v7 cortex a9,用到的编译器是 arm-none-eabi
在Ubuntu中利用 对应版本的 petalinux 自带的 arm-none-eabi 编译器编译libtiff
最后Vitis IDE中添加并使用编译好的第三方库 libtiff 就能保存 tiff 文件了

libtiff 交叉编译

下载源码,解压到ubuntu
配置Makefile命令 ./configure --prefix=/home/hammer/tiff-4.5.0/install --host=arm-none-eabi CFLAGS="-fno-exceptions --specs=nosys.specs -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard"
然后 make & make install

编译好之后的结果,移到windows中
在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件,交叉编译,ide

在Vitis IDE中添加libtiff并编译

打开IDE,新建一个application,右击properties

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件,交叉编译,ide

gcc compiler 配置 Include,path 添加编译好的 include 路径

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件,交叉编译,ide
gcc linker 配置 Libraries,path 添加 tiff 的 lib 库,-l 添加 tiffm

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件,交叉编译,ide

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件,交叉编译,ide

编写一个 main.c 进行测试 libtiff 库函数是否能用

#include <stdio.h>
#include <stdlib.h>
#include <tiffio.h>

#define WIDTH 640
#define HEIGHT 480
#define BITS_PER_SAMPLE 8
#define SAMPLES_PER_PIXEL 1

int main() {
    // 假设帧缓存是一个二维数组,存储了像素数据
    // 这里使用动态分配内存来模拟帧缓存
    unsigned char** frameBuffer = (unsigned char**)malloc(HEIGHT * sizeof(unsigned char*));
    for (int i = 0; i < HEIGHT; i++) {
        frameBuffer[i] = (unsigned char*)malloc(WIDTH * sizeof(unsigned char));
    }

    // 假设帧缓存已经填充了像素数据
    // 这里仅为示例,使用简单的灰度图像
    for (int y = 0; y < HEIGHT; y++) {
        for (int x = 0; x < WIDTH; x++) {
            frameBuffer[y][x] = (unsigned char)(x % 256);
        }
    }

    // 创建 TIFF 文件指针
    TIFF* tiff = TIFFOpen("frame.tiff", "w");

    if (tiff == NULL) {
        printf("无法创建 TIFF 文件\n");
        return 1;
    }

    // 设置 TIFF 参数
    TIFFSetField(tiff, TIFFTAG_IMAGEWIDTH, WIDTH);
    TIFFSetField(tiff, TIFFTAG_IMAGELENGTH, HEIGHT);
    TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, BITS_PER_SAMPLE);
    TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, SAMPLES_PER_PIXEL);
    TIFFSetField(tiff, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
    TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
    TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, 1);

    // 逐行写入像素数据
    for (int y = 0; y < HEIGHT; y++) {
        if (TIFFWriteScanline(tiff, frameBuffer[y], y, 0) < 0) {
            printf("写入 TIFF 文件失败\n");
            TIFFClose(tiff);
            return 1;
        }
    }

    // 关闭 TIFF 文件
    TIFFClose(tiff);

    // 释放帧缓存内存
    for (int i = 0; i < HEIGHT; i++) {
        free(frameBuffer[i]);
    }
    free(frameBuffer);

    printf("帧缓存已保存为 frame.tiff\n");

    return 0;
}

其实编译成功就说明可以了

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件,交叉编译,ide

遇到的问题

直接 ./configure --prefix=/home/hammer/tiff-4.5.0/install --host=arm-none-eabi 会报错

报错1:libc.a undefined reference to _exit

stack overflow 社区有相关讨论 Makefile linking: undefined reference to _exit
根据讨论结果,在 CFLAGS 中加上 -fno-exceptions --specs=nosys.specs 即可

报错2:tiff_app.elf uses VFP register arguments, libtiff.a(tif_close.o) does not

说明编译的 libtiff.a 不带VFP浮点运算,所以在 CFLAGS 中要加上

 -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard

报错3:\libtiff.a(tif_aux.o): in function TIFFDefaultTransferFunction: tif_aux.c:(.text+0x5e4): undefined reference to `pow’

在C语言中,pow函数是位于数学库中的一个标准函数,说明缺少对数学库的链接
所以在 Libraries 部分,添加链接标志 -lm文章来源地址https://www.toymoban.com/news/detail-572862.html

到了这里,关于在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 - 使用第三方字体

    在微信小程序中,我们可以通过引入第三方字体来实现更加个性化和独特的文字效果。本文将详细介绍如何引入并使用第三方字体。 步骤一:选择字体文件 首先,我们需要选择一个适合的第三方字体文件。可以在网络上搜索并下载免费的字体文件,也可以购买商业字体。确

    2024年02月03日
    浏览(53)
  • Nginx 第三方健康检测模块的使用

    模块开源地址:https://github.com/yaoweibin/nginx_upstream_check_module 官网介绍:http://tengine.taobao.org/document_cn/http_upstream_check_cn.html nginx自带健康检查机制 第三方ngx_http_upstream_check_module模块 被动健康检查 提供主动式后端服务器健康检查的功能 访问时才对后端进行探活且无法预警,影响

    2024年02月03日
    浏览(39)
  • 使用开源项目JustAuth完成第三方登录

    JustAuth项目源码地址:https://github.com/justauth/JustAuth JustAuth文档地址:https://justauth.wiki/guide/quickstart/oauth/ 此demo的项目地址:xfeng520/JustAuthDemo (gitee.com) 开发者 指使用 JustAuth 的开发者 第三方 指开发者对接的第三方网站,比如:QQ平台、微信平台、微博平台 用户 指最终服务的真实

    2023年04月22日
    浏览(77)
  • Docker学习路线6:使用第三方镜像

    第三方镜像是在Docker Hub或其他容器注册表上提供的预构建Docker容器镜像。这些镜像由个人或组织创建和维护,可以作为您容器化应用程序的起点。 Docker Hub 是最大和最受欢迎的容器镜像注册表,包含官方和社区维护的镜像。您可以根据名称或要使用的技术搜索镜像。 例如:

    2024年02月16日
    浏览(42)
  • vue中第三方库nprogress使用

    npm i nprogress@0.2.0 说明:用于请求拦截器,响应拦截器,start进度条开始,done进度条结束 说明:放入请求拦截器里面。 说明:放入响应拦截器里面。 

    2024年02月14日
    浏览(41)
  • layui第三方组件cron的使用

    1. 首先上代码 下载资源: 1. cron生成组件(开源) 正常来说你只要下载 开源的cron组件,再下载layui,把我上面的html保存到layui文件夹同级目录,浏览器打开这个html,点击输入框的位置就可以正常使用,为避免无法使用,本文章也有嵌入资源可直接下载

    2024年02月12日
    浏览(40)
  • Springboot使用JustAuth完成各种第三方登陆

    目录 使用Gitee进行登陆 1.Gitee准备工作 2. 编码 3.建立数据表          4. 自由发挥 示例: 进入gitee,在设置中选择此选项   依赖   配置文件  接口编写 如果有spring security的话,还要打开这两个接口的访问权限为所有人都可以访问。 没有的可忽略 启动测试 访问: 同意授权

    2024年02月13日
    浏览(35)
  • 云备份——第三方库简单介绍并使用(上)

    目录 一,Jsoncpp库序列化和反序列化 二,bundle文件压缩库  2.1 文件压缩 2.2 文件解压 首先我们需要先了解一下json是什么,json是一种数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。 json 数据类型:对象,数组,字符串,数字 对象:使用花括号 {} 括起

    2024年02月10日
    浏览(43)
  • 如何使用第三方API采集电商数据呢?

    电商商家最常唠叨的就是店铺运营难做。每日多平台店铺数据统计汇总繁琐耗时,人工效率偏低,且工作内容有限。 特别是眼下“618,双十一,双十二,年底大促”将至,如何提高运营的效率和质量、保证产品及服务的良性运作,是电商企业急需解决的难题。 01 数据,电商

    2024年02月20日
    浏览(54)
  • 避免使用第三方工具完成电脑环境检测

    在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境,其实整个过程比较重复和固定,所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼的。这里会从软件开始介绍,

    2024年02月10日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包