c++ - Windows 上 OpenCV 应用程序的紧凑构建

标签 c++ visual-studio opencv

我正在阅读 this关于如何使用 OpenCV 为应用程序创建紧凑构建的文章。

但是,本文仅包含 GCC 相关的优化。我在 Visual Studio 中寻找等效选项,但只能找到最小化大小 (/Os) 和选项/LTCG 的选项。

我正在使用从源代码构建的 OpenCV 静态库构建一个非常简单的 OpenCV 控制台应用程序(代码如下)。问题是可执行文件的大小太大(调试版本为 37 MB,发布版本为 19 MB)。我想将该大小减小到几 MB,并且我正在寻找方法来做到这一点 - 我在研究这个问题时发现了那篇文章。

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>

int main()
{
    cv::Mat m = cv::imread("sample.jpg");
    cv::imwrite("output.jpg", m);
    std::cout << "Hello World!\n" << m.rows << " " << m.cols;
    return 0;
}

以防万一有人想知道,我包括以下库(以下是 Release模式):
opencv_core430.lib
opencv_imgproc430.lib
opencv_imgcodecs430.lib
libjpeg-turbo.lib
libpng.lib
libtiff.lib
libwebp.lib
ippiw.lib
zlib.lib
IlmImf.lib
libjasper.lib
ittnotify.lib
ippicvmt.lib

如果有人对 Visual Studio 中的等效选项有任何想法,那将有很大帮助。

此外,是否有人成功地使用 Visual Studio 上的静态 OpenCV 库减小了可执行文件的大小?

最佳答案

您可以根据您的模块要求进行构建,详情请参阅 blog .
最简单的构建方法是使用 OpenCV cmake 示例:

cmake
-D WITH_CUDA=OFF \
-D WITH_MATLAB=OFF \
-D BUILD_ANDROID_EXAMPLES=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_SHARED_LIBS=OFF \
-D BUILD_opencv_objdetect=OFF \
-D BUILD_opencv_video=OFF \
-D BUILD_opencv_videoio=OFF \
-D BUILD_opencv_features2d=OFF \
-D BUILD_opencv_flann=OFF \
-D BUILD_opencv_ml=OFF \
-D BUILD_opencv_photo=OFF \
-D BUILD_opencv_python=OFF \
-D BUILD_opencv_shape=OFF \
-D BUILD_opencv_stitching=OFF \
-D BUILD_opencv_superres=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_opencv_videostab=OFF \
-D BUILD_opencv_highgui=ON \
-D BUILD_opencv_imgproc=ON \
..
对于静态链接,您可以通过取消归档 .a 来选择模块。至.o并将它们捆绑在一个 .a 中.
注意:请确保不要破坏依赖项。
例子:
取消归档 .a使用 ar -x libopencv_imgproc.a并再次存档ar -rc libopencv_custom.a *.o

关于c++ - Windows 上 OpenCV 应用程序的紧凑构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585997/

相关文章:

python - 使用命名(fifo)管道在 python 和 c++ 之间传输数组(图像)

c++ - 动态生成声音

android - 适用于 Xamarin 的 Genymotion Android 模拟器

python - 如何在 OpenCV 中找到二进制骨架图像的端点?

c++ - fatal error C1017 : invalid integer constant expression when using "#if (false)"

c++ - 是否将指向第一个成员的指针解释为类本身定义良好?

visual-studio - 运行 "armasm.exe"失败 : "The application was unable to start correctly (0xc000007b)

visual-studio - Visual Studio 中的事件选项卡向左移动?

opencv - 使用pip安装旧版本的cv2

python - Opencv获取检测到的物体的平均颜色