[問題]QT和OpenCV的整合bug
小弟最近試著用Qt Creator開發OpenCV和Qt整合的C++程式
遇到了一點問題 詳細如下
用MainWindow類別繼承QMainWindow開一個視窗
寫一個繼承QGraphicsScene的CvScene類別於QGraphicsView中建置
在CvScene中加入QGraphicsPixmapItem當OpenCV影像處理的顯示介面
從網路上找OpenCV影像格式IplImage轉Qt影像格式QPixmap的函式
將OpenCV處理過的影像顯示在CvScene上
現在是先用灰階轉換來測試
於是做一個QAction按鈕在QMainWindow的QToolBar中
按下按鈕時用Qt的signal/slot機制去呼叫
CvScene中用OpenCV轉灰階的slot函式
此時程式當掉了 出現~~.exe exited with code -1073741819
的錯誤訊息
程式片段如下
CvScene中轉灰階的slot函式
宣告
class CvScene:public QGraphicsScene
{
Q_OBJECT
~~~~~~~~
public slots: void cvCvt2Gray();
~~~~~~~~
};
實作
void CvScene::cvCvt2Gray()
{
IplImage *src=cvLoadImage("123.jpg",CV_LOAD_IMAGE_COLOR);
IplImage *des=cvCreateImage(cvGetSize(cvImg),IPL_DEPTH_8U,1);
cvCvtColor(src,des,CV_RGB2GRAY);
qImgItem->setPixmap(qcvQPixmap(des));
//qImgItem是一個QGraphicsPixmapItem
//qcvQPixmap是IplImage轉成QPixmap的函式
}
MainWindow建構子建置的QAction按鈕和connect機制
toolBar=new QToolBar();
cvtColor=new QAction("Convert Gray",toolBar);
toolBar->addAction(cvtColor);
this->addToolBar(toolBar);
connect(cvtColor,SIGNAL(triggered()),scene,SLOT(cvCvt2Gray()));
//scene是一個CvScene
其中triggered()是QAction按下時會發出的signal
問題不會是在IplImage轉QPixmap的程式上
因為一開始顯示的影像就是從OpenCV開檔成功轉換顯示出來
這樣看起來似乎是connect機制和cvCvtColor衝突到
不過我在MainWindow中又加了個emit cvtColor->trigger();
等於是"自動"呼叫QAction的slot trigger()讓它觸動signal triggered()
去connect呼叫轉灰階cvCvt2Gray()
(這裡我也不知道為啥slot可以被emit)
卻是成功轉灰階程式沒有當掉
或是將cvCvt2Gray中內容加在建構子上執行也OK
所以總歸問題就是"手動去按按鈕呼叫OpenCV的影像處理函式會當機"
感覺這應該是蠻簡單的問題
因為試著整合兩者的人太多了 但在google上都沒看過這樣問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.56.71.90
※ 編輯: goodwise 來自: 61.56.71.90 (01/28 14:58)
推
01/28 16:36, , 1F
01/28 16:36, 1F
→
01/28 16:41, , 2F
01/28 16:41, 2F
→
01/28 16:41, , 3F
01/28 16:41, 3F
→
01/28 16:58, , 4F
01/28 16:58, 4F
→
01/28 17:08, , 5F
01/28 17:08, 5F
→
01/28 17:09, , 6F
01/28 17:09, 6F
→
01/29 11:09, , 7F
01/29 11:09, 7F
→
01/29 11:09, , 8F
01/29 11:09, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章