экспорт изображений возвращает серое изображение в opencv - PullRequest
1 голос
/ 15 апреля 2020

Я использую Network Optix Сервис управления видео. Используя их приложение, я создаю плагин. Для моей цели я хочу экспортировать кадр как изображение из видео. для этого я использовал следующий код для преобразования в объект cv и сохранения в свой файл.

cv::Mat img_color; 

cv::Mat img(
 videoFrame->height(),/*_rows*/
 videoFrame->width(), /*_cols*/
 CV_8UC1, //< BGR color space (default for OpenCV) /*_type*/
 (void*) videoFrame->data(0), /*_data*/
 (size_t) videoFrame->lineSize(0)); /*_step*/

 cv::cvtColor(img, img_color, CV_GRAY2RGB);


m_lastVideoFrameTimestampUs = videoFrame->timestampUs();
std::string file_path = "/var/www/html/images/"+std::to_string(m_lastVideoFrameTimestampUs)+".jpg";
cv::imwrite(file_path,img_color);

ниже снимок экрана - это то, что я получаю в клиентском приложении Network Optix.

enter image description here

Но это то, что я получаю в виде файла изображения на моей машине.

enter image description here

  1. cvtColor не влияет на изображение
  2. Я думаю, CV_8UC1 аргумент должен быть изменен так, чтобы я получал RGB-изображение

РЕДАКТИРОВАТЬ - 1:

изменяется CV_8UC1 на CV_8UC3

Результат превращается в 3 сегмента изображения

enter image description here

1 Ответ

2 голосов
/ 15 апреля 2020

CV_8UC1 означает, что это 8-битный одноканальный массив, сначала вы получаете изображение в градациях серого, и вы не можете, кроме cvtColor, снова его раскрасить. cvtColor, который вы использовали, преобразует изображение в BGR, но все каналы будут иметь одинаковое значение, поэтому оно будет продолжать выглядеть как оттенки серого.

В этом случае вы можете использовать CV_8UC3, что означает, что оно 8-разрядная целочисленная матрица / изображение без знака с 3 каналами (если ваше изображение в 3 каналах)

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