В настоящее время я работаю над программой, использующей файл глубины. Однако, когда я пытаюсь загрузить этот файл, я продолжаю получать ошибки сборки. Однако я не получаю никаких уведомлений об ошибках, поэтому я не уверен, в чем проблема. Процесс загрузки файла показан ниже.
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <sstream>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
#define WIDTH 640
#define HEIGHT 480
#define F 524
#define CX 316
#define CY 256
int main()
{
Mat depth;
depth.create(480, 640, CV_16UC1);
FILE *fp = fopen("depth.dat", "rb");
fread(depth.data, 2, WIDTH * HEIGHT, fp);
fclose(fp);
imshow("depth image", depth);
int k = waitKey(0); // Wait for a keystroke in the window
}
Всегда проверяйте правильность
fopen
иfread
! Если вы не получаете никаких уведомлений об ошибках, как вы можете быть уверены, что получаете ошибки сборки?Как мне это сделать?
fopen
возвращает нулевой указатель в случае сбоя.fread
в этой программе должно возвращатьWIDTH * HEIGHT
, иначе файл не содержал бы столько элементов. Кроме того, не используйте#include <stdio.h>
в C++,#include <cstdio>
Итак, я должен проверять нулевой указатель? Как я могу это сделать? И если он вернет один, что я могу сделать, чтобы это исправить?
if(fp == nullptr) { std::perror("image.dat"); } else { /* it succeeded, put the rest of your program here */ }
Я просто запустил его с этим, и он просто запустился, ничего мне не сказав.
Тогда вы, вероятно, ошиблись.Этот код работает
@TedLyngmo Если вы посмотрите на изменения, которые я внес в основной вопрос, то это то, что я получаю как для изображения, так и для командного окна. Не уверен, почему изображение отображает только черный экран.
Вы должны поместить результат ошибки в вопрос в виде текста , а не в виде изображения. В любом случае, проблема в том, что
DLL
не могут быть загружены. Находятся ли файлыDLL
, которые он пытается загрузить, там же, где он пытается их загрузить?@TedLyngmo Файл .dat хранится в том же месте, что и обычные изображения в программе, и они загружаются правильно.
Три файла
DLL
не загружены правильно - об этом ясно говорит вывод об ошибке.все упустили суть. ваше окно imshow не полностью черное. посмотрите внимательно. вы передаете данные CV_16U в imshow... это будет сложно. преобразовать данные в uint8 и диапазон от 0 до 255, или (лучше) преобразовать в float32 и диапазон от 0,0 до 1,0. Я растянул диапазон вашего скриншота в фоторедакторе: imgur.com/a/FnVWVKx