【问题标题】:Viewing images in a window using C Program?使用 C 程序在窗口中查看图像?
【发布时间】:2012-07-19 09:54:25
【问题描述】:

我正在尝试开发一个 YUV 图像查看器。目标是读取 YUV 图像并在窗口中显示图像。我正在使用 C 开发此应用程序。

在将 YUV 信息转换为 RGB 数据后,为了查看图像,我使用了 OpenCV 中的 cvShowImage 和 cvResize 函数。要在其他系统中使用此应用程序,我需要在其中安装 opencv,因为我使用的是预编译的 dll。我通过基于“How to embedd openCV Dll's in Executable”中提供的指南使用静态库重新编译程序来解决此问题,并生成了一个可跨机器移植的新可执行文件。这导致我的应用程序文件大小从 100KB 增长到 2350KB。这种增长是巨大的。我怀疑这是因为一些不必要的功能正在链接到我的最终可执行文件

为此,我使用了开关 Eliminate Unreferenced Data (/OPT:REF)。但这并没有解决任何问题。

有没有办法解决这个问题?

【问题讨论】:

    标签: c image optimization opencv


    【解决方案1】:

    链接器会自动从您的 exe 中删除所有不需要的代码。

    但是如果你记得你的程序包含了

    • 读取各种图像格式(bmp、jpg、tiff等)的所有代码,
    • OpenCV 核心的重要组成部分(矩阵处理)
    • 一些特定于操作系统的窗口和消息处理(显示图像并能够调整大小/单击/等)
    • 您使用但不知道的其他一些实用程序

    就是这样……几 MB 的代码。

    编辑

    不要忘记在发布模式下构建您的程序。在调试模式下,在标准代码中添加了更多与调试相关的信息。

    【讨论】:

    • @vasile:我在发布模式下编译了代码。这改变了大小,但减少并不令人印象深刻。我的程序没有使用库中的任何预定义函数。它唯一访问的是 cvShowImage。我看不到 png、jpg 库如何需要此功能。我认为他们需要被排除在外。但我感觉它没有发生。发布模式下的应用程序为 30Kb,但包括 opencv 库已达到 1830Kb。
    • 你说你需要加载一张图片——不清楚你从哪里(文件或相机)获取它,但无论你使用什么来加载该图片,你都不知道有很多代码的。还有一些你使用但你没有想到的东西,比如 std 库或许多其他有用的编程工具,它们会增加你的 lib 大小。
    • @vasile:我开发了一个解码 jpeg 图像的软件。我将普通 bin 格式的 jpeg 图像读入内存,然后解码图像并获得原始像素。现在我想在窗口中查看这些原始像素。所以我不使用任何预定义的 loadimage 函数。 loadimage函数其实我自己开发的。
    • 是什么让你认为我在 andswer 中写的列表必须消失,只是因为你没有使用 jpeg 解码器?如果你没有从头开始编写整个 jpeg 解码,在纯 cpp 中,没有任何库调用,包括 DCT 和其他类似的东西,你实际上 调用一个 jpeg 库,它增加了 exe 的大小.
    • 如果我没有调用库中的任何函数,作为优化的一部分(无法访问的代码),它们是否会自动从最终的 exe 中删除?请原谅我不清楚链接是如何工作的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多