2011-11-05 100 views
2

我在qt gui應用程序的窗體之間傳遞cv :: mat數據時遇到了困難,目前我只想將主窗口上用戶選擇的圖像傳遞給主窗口並顯示它在結果頁在窗體之間傳遞cv :: Mat img

void MainWindow::on_pushButton_clicked() 
{ 
QString fileName = QFileDialog::getOpenFileName(this, 
tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.bmp)")); 
Lateral= cv::imread(fileName.toAscii().data()); 
} 

在主窗口的頭文件對我definded: -

public: 
    cv::Mat get_Lateral(cv::Mat img); 
    cv::Mat get_Posteroanterior(); 

在我定義如下因素的MainWindow.cpp文件(我已經嘗試了一些變化的方法): -

cv::Mat MainWindow::get_Lateral(cv::Mat img){ 
Lateral.copyTo(img); 
return img; 
} 

cv::Mat MainWindow::get_Posteroanterior(){ 
return Posteroanterior; 
} 

最後新的窗體上我有這樣的事情: -

MainWindow Mw ; 
cv::Mat op; 
Mw.get_Lateral(op); 
//(Mw.get_Posteroanterior()).copyTo(op); 
cv::namedWindow("Lateral Image"); 
cv::imshow("Lateral Image",op); 

當我運行此我得到一個運行時錯誤,所以我加了一個if statment檢查CV ::墊OP像內容這個: -

MainWindow Mw ; 
cv::Mat op; 
Mw.get_Lateral(op); 
//(Mw.get_Posteroanterior()).copyTo(op); 
if (!op.data) 
    cv::namedWindow("dud Image"); 
else{ 
cv::namedWindow("Lateral Image"); 
cv::imshow("Lateral Image",op); 
} 

而且我得到了啞圖像窗口暗示op是空的。

有關如何正確執行此過程的任何建議都會被忽略,我對opencv和C++相當陌生,所以我對任何公然錯誤表示歉意。

乾杯

回答

1

看看我的answer涉及集成OpenCV和更大的應用程序。我不推薦在Qt GUI應用程序中使用highgui imshow函數。過去它爲我做了一些奇怪的事情。

基本上,你可以轉換cv::MatQImage,然後要麼使用QGLWidget,或者只是繪製到QPixmap,如果你不特別需要高速。

至於傳遞形式之間的Mat對象,既可以將其轉換爲QImage,然後使用信號/像我的例子示出了狹槽,或者如果你需要操作Mat對象進一步,可以創建一個QMetaTypeQMetaType將允許您通過表單傳輸它,就像您任何其他本地Qt對象一樣。 Here是一個讓你入門的Qt例子。

希望有幫助!

+0

Chhers,我會給它一個結果並讓你知道結果 – melinnde

0

get_Lateral的返回值被丟棄 - 你要麼需要通過引用來修改它在的地方:

void MainWindow::get_Lateral(cv::Mat& img){ 
Lateral.copyTo(img); 
//return img; 
} 

或分配回本地品種::在主墊目標:

MainWindow Mw ; 
cv::Mat op; 
op = Mw.get_Lateral(op); 
//(Mw.get_Posteroanterior()).copyTo(op); 
if (!op.data) 
    cv::namedWindow("dud Image"); 
else{ 
cv::namedWindow("Lateral Image"); 
cv::imshow("Lateral Image",op); 
} 
+0

感謝您的回覆,我嘗試了你的每一個sugesstions,但他們都返回了舊圖像 – melinnde

+0

好吧 - 我不熟悉opencv,所以我只能發現純粹的C++錯誤。但假設Lateral.copyTo完成它所說的話,並且您仍然在op.data中爲空,我會檢查lateral.data是否也爲null – je4d

+0

不用擔心,歡呼聲。當打開新表單時,我可以打開橫向圖像 – melinnde