OpenCV cv :: Mat отображает пустые серые изображения? Не могу найти причину - PullRequest
3 голосов
/ 01 мая 2011

Я просто хочу отобразить это изображение «img1.jpg» в проекте c ++ с использованием библиотек opencv для будущих процессов, но оно отображает только пустое серое окно.В чем причина этого.Есть ли ошибка в этом коде?пожалуйста, помогите!

Вот код;

 Mat img1;
 char imagePath[256] = "img1.jpg";
 img1 = imread(imagePath, CV_LOAD_IMAGE_GRAYSCALE);
 namedWindow("result", 1);
 imshow("result", img1);

Спасибо ...

Ответы [ 5 ]

28 голосов
/ 16 сентября 2012

У меня была такая же проблема, и я решил поставить waitKey(1); после imshow(). Документация OpenCV объясняет, почему:

Эта функция является единственным методом в HighGUI, который может извлекать и обрабатывать события, поэтому его нужно периодически вызывать для нормального события обработка, если HighGUI не используется в некоторой среде, которая принимает забота об обработке событий.

1 голос
/ 03 августа 2016

Спасибо @b_froz. Для получения дополнительной информации об этой проблеме вы можете обратиться к: http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#imshow

Примечание. За этой функцией должна следовать функция waitKey, которая отображает изображение в течение указанных миллисекунд. В противном случае изображение не будет отображаться. Например, waitKey (0) будет отображать окно бесконечно до любого нажатия клавиши (это подходит для отображения изображения). waitKey (25) будет отображать кадр в течение 25 мс, после чего дисплей будет автоматически закрыт. (Если вы поместите его в цикл для чтения видео, оно будет отображать кадр за кадром)

Итак, после imshow() можно поставить не только waitkey(1), но также waitkey(0) или waitkey(other integers). Вот объяснение функции waitkey(): http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#waitkey

1 голос
/ 01 мая 2011

2 варианта

  • Вы указываете неправильный путь к файлу, попробуйте указать абсолютный путь
  • У вас нет кодека JPEG, вам нужно установить libjpeg и libjpeg-dev

Кстати, обратите внимание, что imread принимает const string& в качестве первого аргумента, а не char[].

0 голосов
/ 22 октября 2015

Ваша проблема связана с типом вашего Mat img1. Когда вы загружаете ваше изображение с флагом CV_LOAD_IMAGE_GRAYSCALE, тип вашего Mat равен 0 (CV_8UC1), а функция imshow() не может правильно отобразить изображение. Вы можете решить эту проблему, преобразовав ваш Mat в тип 16 (CV_8UC3):

img1.convertTo(img1,CV_8UC3);

, а затем показать его с imshow():

imshow("result", img1);

Надеюсь, это поможет.

0 голосов
/ 22 сентября 2011

Вы импортируете правильную библиотеку? Это другой очень простой способ загрузить одно изображение:

#define CV_NO_BACKWARD_COMPATIBILITY
#include <cv.h>
#include <highgui.h>
#include <math.h>
main(){
IplImage* img  = cvLoadImage("yourPicture.jpg");
cvNamedWindow("Original", 1);
cvShowImage("Original", img);
}

Я думаю, что вы правильно установили openCV, так что вы можете напечатать это (Ubuntu): g ++ NameOfYourProgram.cpp -o Пример -I / usr / local / include / opencv / -L / usr / local / lib -lcv -lhighgui ./sample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...