2012-09-19 65 views
2

我一直在嘗試使用OpenCV和使用Qt的C++進行圖像處理任務的簡單界面。 我可以通過GUI加載圖像,但是當我按下按鈕_3時, 將圖像轉換爲灰度給出了有關OpenCV的錯誤。 我確定我做錯了什麼。有人能給我一個幫助嗎?Qt + OpenCV灰度錯誤

請參閱下面的文件:

//mainwindow.h 

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QFileDialog> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <vector> 

#include <QtCore/QCoreApplication> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/core/types_c.h> 
#include <opencv2/imgproc/imgproc.hpp> 


namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private slots: 
    void on_pushButton_clicked(); 

    void on_pushButton_2_clicked(); 

    void on_pushButton_3_clicked(); 




private: 
    Ui::MainWindow *ui; 
    //Images variables 
    cv::Mat image_Idl; 
    cv::Mat image_Lit; 
    cv::Mat image_Idl_G; 
    cv::Mat image_Lit_G; 
    double threshHold; 

}; 

#endif // MAINWINDOW_H 


//mainwindow.cpp 
#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <iostream> 
#include <QtCore/QCoreApplication> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/core/types_c.h> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <QSpinBox> 
#include <QSlider> 
#include <stdio.h> 
#include <stdlib.h> 
#include <vector> 

using namespace std; 



MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    ui->horizontalSlider->setRange(0,255); 
    ui->spinBox->setRange(0,255); 

    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->spinBox,SLOT(setValue(int))); 
    connect(ui->spinBox,SIGNAL(valueChanged(int)),ui->horizontalSlider,SLOT(setValue(int))); 

} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 


void MainWindow::on_pushButton_clicked() 
{ 
    QString fileName = QFileDialog::getOpenFileName(this,tr("Load Lit Image"),".",tr("Image Files (*.png *.jpg *.jpeg *.bmp)")); 
    image_Lit = cv::imread(fileName.toAscii().data()); 
    cv::namedWindow("Lit Image"); 
    cv::imshow("Lit Image", image_Lit); 
} 

void MainWindow::on_pushButton_2_clicked() 
{ 
    QString fileName = QFileDialog::getOpenFileName(this,tr("Load Lit Image"),".",tr("Image Files (*.png *.jpg *.jpeg *.bmp)")); 
    image_Idl = cv::imread(fileName.toAscii().data()); 
    cv::namedWindow("Ideal Lit"); 
    cv::imshow("Ideal Lit", image_Idl); 

} 






void MainWindow::on_pushButton_3_clicked() 
{ 
    //Converstions 


    //Convert Lit to gray 



     cv::cvtColor(image_Lit, image_Lit_G,CV_RGB2GRAY); 

    //Convert Ideal gray 


     cv::cvtColor(image_Idl, image_Idl_G,CV_RGB2GRAY); 


     //Threshold the Images to a designated value 
       // Lit 

     threshHold = ui->horizontalSlider->value(); 

      cv::threshold(image_Lit_G,image_Lit_G, threshHold,255,cv::THRESH_BINARY); 
      cv::namedWindow("Gray Scaled Image"); 
      cv::imshow("Gray Scaled Image", image_Lit_G); 


} 

錯誤從編譯器:傳遞給C運行時函數

參數無效。 傳遞給C運行時函數的參數無效。 OpenCV錯誤:在cvtColor,文件C:\ OpenCV \ modules \ imgproc \ src \ color.cpp中,斷言失敗(scn == 3 || scn == 4),行2834 程序意外完成。

彈出窗口中的錯誤:

微軟的Visual C++

的要求,在一個不尋常的方式來終止此應用程序。

+1

你會得到什麼錯誤?從頭文件中猜測幾乎是不可能的(我不相信這個問題有什麼關係)。 – drescherjm

+1

您是否可以更具體地指出「出錯」?您提供的代碼還不足以診斷您的問題。 –

+1

您可以發佈將圖像從OpenCV格式轉換爲Qt imge的代碼部分(或者您用來在Qt中顯示圖像的任何內容)? – MeloMCR

回答

0

我有在更新我的windows7機器後重新編譯了上面的程序並驚人的發揮了作用! 它真的很奇怪...我沒有對程序做任何修改(至少我不能修改任何明顯不同的東西),但是在重新安裝comodo firewal之後,它能夠正常工作..... 感謝你們的幫助。

0
#include "iostream" 
#include "cv.h" 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    Mat image = imread("C:\\lena.jpg"); 
    cvtColor(image,image,CV_RGB2GRAY); 
    imshow("test",image); 
    waitKey(); 
    return 0; 
} 

上面的代碼(在Qt的控制檯應用程序。)工作....它顯示灰階圖像...嘗試包括cv.h文件...

+1

是的,上面的代碼工作。我用簡單的C++編寫了inteire程序並運行。我遇到的問題是添加GUI來執行我在純編碼中所做的功能。我創建了一個按鈕(pushbutton_3)來執行幾個功能,例如將圖像轉換爲灰度,閾值查找輪廓等。問題是,當我按下按鈕時,會在第一個操作中出現錯誤,在這種情況下會轉換圖像灰度。 –

+1

用於控制檯的純C++是使用「qt」創建器完成的。 –

+0

你用IplImage試過C接口嗎? –