2012-09-19 48 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接口吗? –