OpenCV С++ Ошибка при попытке загрузить файл глубины

avatar
Jace
8 августа 2021 в 23:18
49
0
0

В настоящее время я работаю над программой, использующей файл глубины. Однако, когда я пытаюсь загрузить этот файл, я продолжаю получать ошибки сборки. Однако я не получаю никаких уведомлений об ошибках, поэтому я не уверен, в чем проблема. Процесс загрузки файла показан ниже.

#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
    
}

enter image description here

enter image description here

Источник
Ted Lyngmo
8 августа 2021 в 23:56
0

Всегда проверяйте правильность fopen и fread! Если вы не получаете никаких уведомлений об ошибках, как вы можете быть уверены, что получаете ошибки сборки?

Jace
9 августа 2021 в 00:00
0

Как мне это сделать?

Ted Lyngmo
9 августа 2021 в 00:03
0

fopen возвращает нулевой указатель в случае сбоя. fread в этой программе должно возвращать WIDTH * HEIGHT, иначе файл не содержал бы столько элементов. Кроме того, не используйте #include <stdio.h> в C++, #include <cstdio>

Jace
9 августа 2021 в 00:11
0

Итак, я должен проверять нулевой указатель? Как я могу это сделать? И если он вернет один, что я могу сделать, чтобы это исправить?

Ted Lyngmo
9 августа 2021 в 00:12
0

if(fp == nullptr) { std::perror("image.dat"); } else { /* it succeeded, put the rest of your program here */ }

Jace
9 августа 2021 в 00:16
0

Я просто запустил его с этим, и он просто запустился, ничего мне не сказав.

Ted Lyngmo
9 августа 2021 в 00:24
0

Тогда вы, вероятно, ошиблись.Этот код работает

Jace
9 августа 2021 в 00:46
0

@TedLyngmo Если вы посмотрите на изменения, которые я внес в основной вопрос, то это то, что я получаю как для изображения, так и для командного окна. Не уверен, почему изображение отображает только черный экран.

Ted Lyngmo
9 августа 2021 в 00:56
0

Вы должны поместить результат ошибки в вопрос в виде текста , а не в виде изображения. В любом случае, проблема в том, что DLL не могут быть загружены. Находятся ли файлы DLL, которые он пытается загрузить, там же, где он пытается их загрузить?

Jace
9 августа 2021 в 01:09
0

@TedLyngmo Файл .dat хранится в том же месте, что и обычные изображения в программе, и они загружаются правильно.

Ted Lyngmo
9 августа 2021 в 01:18
0

Три файла DLL не загружены правильно - об этом ясно говорит вывод об ошибке.

Christoph Rackwitz
9 августа 2021 в 15:26
0

все упустили суть. ваше окно imshow не полностью черное. посмотрите внимательно. вы передаете данные CV_16U в imshow... это будет сложно. преобразовать данные в uint8 и диапазон от 0 до 255, или (лучше) преобразовать в float32 и диапазон от 0,0 до 1,0. Я растянул диапазон вашего скриншота в фоторедакторе: imgur.com/a/FnVWVKx

Ответы (0)