如何使用opencv和eclipse(windows)获取独立的可执行文件?

时间:2014-07-03 12:54:57

标签: c++ eclipse windows opencv static-libraries

我已经编写了一个小程序来准备一个图像,该图像稍后由FPGA板处理。即使没有安装opencv,我也需要在任何Windows机器上运行它。我已经阅读了很多关于堆栈溢出的教程和答案,但这些似乎都不适用于我。我使用Cmake和MinGW自己编译opencv来构建静态库(.a文件)。我如何获得项目中的项目,我需要哪些项目以及如何链接它们?似乎每次我尝试链接我之前使用的库(使用dll时)似乎都对其他库有某种依赖。

提前致谢, Brillow

错误消息是:

g++ "-LE:\\opencv\\staticlibs\\lib" -static-libgcc -static-libstdc++ -mwindows -o img_prep.exe main.o -lIlmImf -ljasper -lpng -ltiff -ljpeg -lz -lopencv_highgui249 -lopencv_imgproc249 -lopencv_core249 
E:\opencv\staticlibs\lib/libopencv_highgui249.a(grfmt_jpeg.cpp.obj):grfmt_jpeg.cpp:(.text.unlikely._ZN2cvL16my_jpeg_load_dhtEP22jpeg_decompress_structPhPP9JHUFF_TBLS5_.constprop.52+0xce): undefined reference to `jpeg_alloc_huff_table'
E:\opencv\staticlibs\lib/libopencv_highgui249.a(grfmt_jpeg.cpp.obj):grfmt_jpeg.cpp:(.text$_ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0xe2): undefined reference to `jpeg_CreateCompress'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: E:\opencv\staticlibs\lib/libopencv_highgui249.a(grfmt_jpeg.cpp.obj): bad reloc address 0xe2 in section `.text$_ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

我在MinGW链接器中链接了以下库: Libraries

这是我的代码:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <fstream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    if (argc != 2) {
        cout << "Usage: img_prep InputImage" << endl;
        return -1;
    }

    Mat img, img_gray;
    Size size(800,600);

    img = imread(argv[1], CV_LOAD_IMAGE_COLOR);

    if (!img.data) {
        cout << "Could not read the image!" << endl;
        return -1;
    }

    cvtColor(img, img_gray, CV_RGB2GRAY);
    resize(img_gray, img, size);

    cout << "Image successfully converted!" << endl;

    ofstream output;
    output.open("output.img", ios::binary);

    output.write((char *) img.data, img.rows * img.cols);
    output.close();

    imwrite("output.bmp", img);

    cout << "Image saved!" << endl;

    //Ergebnis anzeigen:
    namedWindow("Display", WINDOW_AUTOSIZE);
    imshow("Display", img);

    waitKey(0);
    return 0;
}

0 个答案:

没有答案