Imshow() не работает в сшивании_detailed.cpp opencv

Я добавил imshow("result",result) в конец образца opencv (stitching_detailed.cpp), который находится в исходных файлах opencv, но он не показывает изображение. если я сохраню его в .jpg, а затем снова открою с помощью imread, он будет работать нормально. Кто-нибудь знает, почему? этот код сохраняет файл в result.jpg, но не показывает изображение!! Странный!

imwrite("result.jpg", result); namedWindow("resultwindow", WINDOW_AUTOSIZE); imshow("resultwindow", result); waitKey(0);

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

imwrite(result_name, result);
Mat result2=imread("result.jpg");
namedWindow("resultwindow", WINDOW_AUTOSIZE);
imshow("resultwindow", result2);
waitKey(0);

Это действительно странно. попробуй это . вы увидите, пожалуйста, помогите мне, где не так?!! как отобразить сшитое изображение в прошивке_Detailed.cpp?


person Ali Jahani    schedule 01.07.2015    source источник
comment
добавьте waitKey(some_millis); после imshow, иначе ничего не будет нарисовано.   -  person berak    schedule 01.07.2015
comment
Я добавил ключ ожидания (0) и ключ ожидания (5000), оба не работали.   -  person Ali Jahani    schedule 01.07.2015
comment
Я думаю, может быть, imwrite делает что-то, чтобы результат Mat можно было показать и сохранить, но imshow этого не делает. Так ли это?   -  person Ali Jahani    schedule 01.07.2015
comment
Попробуйте сами в указанном коде. Это действительно ошибка. Я много работал с imshow, показывая проекты в реальном времени, но никогда раньше не видел этого в других кодах! Что-то особенное в этой Матрице, чего imshow не может показать   -  person Ali Jahani    schedule 01.07.2015
comment
Попробуйте использовать WINDOW_AUTOSIZE вместо WINDOW_NORMAL. Просто чтобы быть уверенным. Действительно, я думаю, вы могли бы опустить свои операторы cvNamedWindow. По крайней мере, используйте вместо него namedWindow. Вероятно, это не решение, но может сузить возможности.   -  person Miki    schedule 01.07.2015
comment
тоже не работал. namedWindow (окно результатов, WINDOW_AUTOSIZE); Можете ли вы проверить это? Я думаю, что это ошибка.   -  person Ali Jahani    schedule 01.07.2015


Ответы (1)


На самом деле это не баг. result — это 3-канальная матрица int16, и вы не можете отобразить ее с помощью imshow (она показывает серое изображение).

Просто конвертируйте его в обычный Mat3b, например:

Mat3b visibleResult;
convertScaleAbs(result, visibleResult);
imshow("visibleResult", visibleResult);
waitKey();

и вы должны быть в состоянии видеть это.

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

person Miki    schedule 01.07.2015