2016-10-14 6 views
0

У меня есть проблема переборе координат OpenCV Mat:Итерация через Мат

cv::Mat picture = cv::Mat(depth.rows, depth.cols, CV_32F); 

    for (int y = 0; y < depth.rows; ++y) 
    { 
     for (int x = 0; x < depth.cols; ++x) 
     { 
      float depthValue = (float) depth.at<float>(y,x); 
      picture.at<float>(y, x) = depthValue; 
     } 
    } 
    cv::namedWindow("picture", cv::WINDOW_AUTOSIZE); 
    cv::imshow("picture", picture); 

    cv::waitKey(0); 

Итоговые картинки:

до (глубина)

enter image description here

после (изображение)

enter image description here

Похоже, что это 1. масштабируется и 2. остановился примерно на трети ширины. Есть идеи?

+0

глубина cv_32f также? показать нам его определение –

+0

Здесь также недействителен 'CV_32F'. Вы должны использовать 'CV_32FC <количество каналов>'. См. [Здесь] (http://stackoverflow.com/a/37530646/5008845) для получения более подробной информации – Miki

ответ

4

Похоже, что ваше изображение глубины имеет 3 канала.

Все каналы значения одинаковы для BW изображения (B=G=R), поэтому у вас есть BGRBGRBGR вместо GrayGrayGray, и вы пытаетесь получить доступ к нему, как это 1 канал, поэтому изображение растягивается в 3 раза по горизонтали.

Попробуйте cv::cvtColor(depth,depth,COLOR_BGR2GRAY) перед запуском петли.

+0

Отлично, спасибо – TobSta

Смежные вопросы