我在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);
}
但我最终得到一张扭曲的图像:
(颠倒和倾斜,我认为是步骤问题。
此代码中是否存在明显错误?我知道颠倒的问题是因为两个数据坐标的起源。对倾斜问题最感兴趣。
答案 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);
^^^^ ^^^^