Я столкнулся со странной проблемой, которую, похоже, не могу решить, в том числе с 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 (выпуск).