OpenCV - remap() - 获取黑色像素

时间:2016-07-12 15:16:50

标签: c++ opencv

我正在使用STMap使用remap()映射.jpg图像。

我加载了我的STMap,拆分了通道并将每个通道矩阵转换为CV_32FC1。 我检查了它们并且它工作 - 每个矩阵正确显示并且它的所有值都在0.0和1.0之间。

但是,当我尝试使用remap()功能时:

Mat dst;
remap(image4, dst,map_x,map_y,INTER_LINEAR,BORDER_CONSTANT,Scalar(0,0,0));
imshow( "Result", dst );

它只显示一个黑色图像。

  1. image4 =我的.jpg图片
  2. map_x =灰度CV_32FC1(红色通道 原始STMap)
  3. map_y =灰度CV_32FC1(绿色通道 原始STMap)
  4. 可能是什么问题?

    谢谢!

1 个答案:

答案 0 :(得分:0)

使用cv::remap时出现黑色图像是由于使用了偏移而不是传递的地图中的绝对位置。

光学流算法通常输出运动矢量,而不是绝对位置,而cv::remap希望从中采样绝对坐标(子像素)。

要从CV_32FC2流矩阵开始在两者之间进行转换,我们可以执行以下操作:

// Convert from offsets to absolute locations.
Mat mapx(flow.size(), CV_32FC1);
Mat mapy(flow.size(), CV_32FC1);
for (int row = 0; row < flow.rows; row++)
{
  for (int col = 0; col < flow.cols; col++)
  {
    Point2f f = flow.at<Point2f>(row, col);
    mapx.at<float>(row, col) = col + f.x;
    mapy.at<float>(row, col) = row + f.y;
  }
}

然后mapxmapy可在remap中使用。