libtiff x64 visual studio 2017: выпуск компоновщика - PullRequest
0 голосов
/ 22 января 2019

Я попытался использовать пакет nuget для libtiff: => Пакет <= </a>

Я написал небольшой кусочек кода, чтобы прочитать tif-файл многокадрового изображения.

vector<Mat> LibTiffReader::ReadMultiframeTiff(std::string FilePath)
{
    vector<Mat> Result;
    TIFF* tif = TIFFOpen(FilePath.c_str(), "r");
    if (tif)
    {
        //Si le tif est ouvert, on itère sur ce qu'il y'a dedans...
        do
        {
            Mat Image;
            unsigned int width, height;
            uint32* raster;

            // On récupère la taille du tiff..
            TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);
            TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);

            uint npixels = width*height; // get the total number of pixels

            raster = (uint32*)_TIFFmalloc(npixels * sizeof(uint32)); // allocate temp memory (must use the tiff library malloc)
            if (raster == NULL) // check the raster's memory was allocaed
            {
                TIFFClose(tif);
                cerr << "Could not allocate memory for raster of TIFF image" << endl;
                return vector<Mat>();
            }

            if (!TIFFReadRGBAImage(tif, width, height, raster, 0))
            {
                TIFFClose(tif);
                cerr << "Could not read raster of TIFF image" << endl;
                return vector<Mat>();
            }
            Image = Mat(width, height, CV_8UC3); // create a new matrix of w x h with 8 bits per channel and 3 channels (RGBA)

                                                 // itterate through all the pixels of the tif
            for (uint x = 0; x < width; x++)
                for (uint y = 0; y < height; y++)
                {
                    uint32& TiffPixel = raster[y*width + x]; // read the current pixel of the TIF
                    Vec3b& pixel = Image.at<Vec3b>(Point(y, x)); // read the current pixel of the matrix
                    pixel[0] = TIFFGetB(TiffPixel); // Set the pixel values as BGR
                    pixel[1] = TIFFGetG(TiffPixel);
                    pixel[2] = TIFFGetR(TiffPixel);
                }
            _TIFFfree(raster);
            Result.push_back(Image);
        } while (TIFFReadDirectory(tif));
    }

    return Result;
}

Мне нужно использовать libtiff, потому что мне нужно кое-что сделать с exif-данными моего изображения, чего не позволяет мне OpenCV.

Проблема в том, что когда я хочу скомпилировать,у меня есть ошибки компоновщика:

Error   LNK2001 unresolved external symbol inflateInit_ SIA <Path>\tiff.lib(tif_zip.obj)    1   
Error   LNK2001 LNK2001 unresolved external symbol inflateInit_ SIA <Path>\tiff.lib(tif_pixarlog.obj)   1   

Мой файл package.config выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="libtiff-msvc-x64" version="4.0.7.8808" targetFramework="native" />
</packages>

Когда я захожу в свойства своего проекта, я не вижу никаких параметров пакетов.Я пытался добавить параметры компоновщика вручную в файлы .lib, но у меня возникли те же проблемы.

Ответы [ 2 ]

0 голосов
/ 07 августа 2019
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="libjpeg" version="9.0.1.4" targetFramework="native" />
  <package id="libjpeg.redist" version="9.0.1.4" targetFramework="native" />
  <package id="libtiff" version="4.0.6.2" targetFramework="native" />
  <package id="libtiff.redist" version="4.0.6.2" targetFramework="native" />
  <package id="libtiff-msvc14-x64" version="4.0.7.7799" targetFramework="native" />
  <package id="zlib" version="1.2.8.8" targetFramework="native" />
  <package id="zlib.v120.windesktop.msvcstl.dyn.rt-dyn" version="1.2.8.8" targetFramework="native" />
  <package id="zlib.v140.windesktop.msvcstl.dyn.rt-dyn" version="1.2.8.8" targetFramework="native" />
</packages>

Может быть, проблемы с зависимостями. Моя конфигурация пакетов nuget указана выше.

0 голосов
/ 22 января 2019

Точно так же, как сказал @ReturnVoid, библиотека, загруженная с пакетом nuget, была неправильно скомпилирована для моей системы.

Для решения проблемы:

  • Перейдите на Индекс libtiff и загрузите последнюю версию.
  • Перейдите в каталог загрузки и используйте cmake для его генерации с помощью следующей команды:

    cmake -G "Visual Studio 15 2017 Win64"

  • Как только это будет сделано, откройте проект в Visual studio 2017

  • Сборка библиотеки отладки и выпуска (вы можете найти ее тогда в подкаталоге libtiff).

  • Добавить \ libtiff в качестве включаемого каталога. Добавить \ libtiff \ Release как линкер каталог Добавить tiff.lib в качестве связанной библиотеки Добавить предварительно собранный запрос для копирования tiff.dll и tiffxx.dll для выходного каталога.

...