首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV - remap() -获取黑色像素

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

Stack Overflow用户
提问于 2016-07-12 15:16:49
回答 1查看 1.6K关注 0票数 1

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

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

但是,当我尝试使用remap()函数时:

代码语言:javascript
复制
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的绿色通道)

有什么问题吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 14:28:49

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

光流算法通常输出运动矢量,而不是绝对位置,而cv::remap要求绝对坐标(亚像素)从样本中提取。

要在两者之间进行转换,从CV_32FC2流矩阵开始,我们可以这样做:

代码语言:javascript
复制
// 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38332897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档