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

我在VTK中可视化数据,我想抓取renderwindow的帧缓冲区并在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);
}

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

(倒挂和倾斜,我认为这是一个步骤问题.

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

最佳答案
看看GetRGBACharPixelData的定义:

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

您可以看到它采用了右上角(x2,y2)的索引,而不是子图像的大小.

因此你想要的是:

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

转载注明原文:c – 在VTK帧缓冲区和OpenCV Mat数据之间转换 - 代码日志