簡體   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