cv::imread() не будет работать с файлами.jp2 после диалога GetOpenFileName()

Я столкнулся со странной проблемой, которую, похоже, не могу решить, включая OpenCV, Win32 API и формат файла jpeg2000.

Я создал программу на C++, которая запрашивает изображение, а затем использует его в качестве текстуры, манипулирует им и т. Д. Но вот проблема:

Я спрашиваю путь к файлу изображения с OPENFILENAME и GetOpenFileName(). Вот пример кода для этого очень основного формата:

#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <Windows.h>


void SelectAndOpenImage()
{
    OPENFILENAME openFile;
    char filePath[MAX_PATH] = { 0 };

    ZeroMemory(&openFile, sizeof(OPENFILENAME));

    openFile.lStructSize = sizeof(OPENFILENAME);
    openFile.hwndOwner = NULL;
    openFile.lpstrFile = filePath;
    openFile.lpstrFile[0] = '\0';
    openFile.nMaxFile = MAX_PATH;
    openFile.lpstrFilter = "Jpeg2000 (*.jp2)\0*.jp2\0Bitmap (*.bmp)\0*.bmp\0Jpeg (*.jpg)\0*.jpg\0Png (*.png)\0*.png\0";
    openFile.nFilterIndex = 1;
    openFile.lpstrInitialDir = NULL;
    openFile.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;

    if (GetOpenFileName(&openFile))
    {
        cv::Mat image = cv::imread(openFile.lpstrFile, CV_LOAD_IMAGE_COLOR);
        if (image.empty()) std::cout << "Empty" << std::endl;
        else
        {
            cv::imshow("testing", image);
            cv::waitKey(5000);
        }
    }
    else
    {
        std::cout << "Failure" << std::endl;
    }
}


int main()
{
    SelectAndOpenImage();
    return 0;
}

Проблема в том, что cv::imread() работает правильно для всех форматов файлов изображений, кроме Jpeg2000, cv::imshow() показывает только черное изображение (данные полны нулей). Jpeg2000 хорошо работает вместе с другими, если я вообще не использую этот диалог GetOpenFileName () (вместо этого я просто вставляю путь к файлу непосредственно в исходный код). Однако, если я использую диалоговое окно, но игнорирую выбор файла и вместо этого использую свой собственный жестко закодированный путь к файлу, формат файла Jpeg2000 также не будет работать, опять же, просто чистое черное изображение. Все другие форматы файлов изображений работают, независимо от того, как я это делаю.

Я приветствую все идеи. Я что-то упустил.

В настоящее время я использую Windows10 и Visual Studio 2017 версии 15.8.2 (MSVC++ 14.15). OpenCV - это 3.4.2 (релиз).

0 ответов

Другие вопросы по тегам