最近在用QT學習opencv
點擊菜單中的響應選項,執行相應的函數。
爲了簡化代碼,使用勒函數指針的方法:
void MainWindow::on_menu_laplace_triggered(bool)
{
mydebug ("laplace");
imgPro(myOpencv::imgProLaplace);
}
void MainWindow::on_menu_canny_triggered (bool)
{
mydebug ("canny");
imgPro(myOpencv::imgProCanny);
}
在窗體類中聲明:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
MainWindow(const QString &fileName);
private:
void createActions();
void createToolBars();
void createMenus();
void createDockWidget();
void imgPro(cv::Mat (*prccessFunc) (cv::Mat));
我設計了兩個類,一個只負責用戶界面的佈局和操作,一個只負責opencv的算法。在這兩個類間傳遞函數指針會報錯,解決辦法是把要調用的函數聲明爲靜態函數。
class myOpencv
{
public:
myOpencv();
QImage cvMat2QImage(const cv::Mat& mat);
cv::Mat QImage2cvMat(QImage image);
static cv::Mat imgProHistogramEqualization (cv::Mat srcMat);
static cv::Mat imgProHistogramNormalization (cv::Mat srcMat);
static cv::Mat imgProSobel (cv::Mat srcMat);
static cv::Mat imgProLaplace(cv::Mat srcMat);
static cv::Mat imgProCanny(cv::Mat srcMat);
static cv::Mat imgProFilter (cv::Mat srcMat);
};
從c過度到c++,總會覺得c的簡潔,c++的怪異,但時間長了就會體會到c++的方便,網上還有其他方法解決類之間函數指針傳遞的問題,但是我並沒弄得清楚,於是用勒最簡單的方法,用靜態函數吧。