在VTK帧缓冲区和OpenCV Mat数据之间转换

时间:2014-03-07 22:48:13

标签: c++ opencv vtk

我在VTK中可视化数据,我想抓取渲染窗口的帧缓冲区并在OpenCV应用程序中显示它。

我目前正在尝试通过:

void aig::VirtualScene::Mat(cv::Mat &m) {
  typedef unsigned char pixel;
  pixel *pixels = this->window_->GetRGBACharPixelData(0, 0, this->w_, this->h_, true);
  m = cv::Mat(this->h_, this->w_, CV_8UC4, pixels);
}

但我最终得到一张扭曲的图像:

http://i.imgur.com/4nOxNzJ.png

(颠倒和倾斜,我认为是步骤问题。

此代码中是否存在明显错误?我知道颠倒的问题是因为两个数据坐标的起源。对倾斜问题最感兴趣。

1 个答案:

答案 0 :(得分:4)

查看GetRGBACharPixelData

的定义
virtual unsigned char *GetPixelData(int x,int y,int x2,int y2,int front);

您可以看到右上角的索引(x2,y2),而不是子图像的 size

因此你想要的是:

pixel *pixels = this->window_->GetRGBACharPixelData(0, 0, this->w_ - 1, this->h_ - 1, true);
                                                                   ^^^^         ^^^^