繁体   English   中英

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

[英]Converting between VTK framebuffer and OpenCV Mat data

我在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);
}

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

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

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

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

看看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);
                                                                   ^^^^         ^^^^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM