2012-09-19 5 views
2

GUI 용 Qt를 사용하여 C++에서 OpenCV를 사용하여 이미지 처리 작업을위한 간단한 인터페이스를 만들려고했습니다. GUI를 통해 이미지를로드 할 수 있지만 pushbutton_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 파일에서 2834 행의 어설 션이 실패했습니다 (scn == 3 || scn == 4) 프로그램이 예기치 않게 종료되었습니다.

팝업 창 오류 :

의 Microsoft Visual C++ 비정상적인 방법으로 종료 요청에 따라

이 응용 프로그램.

코드 위
+1

어떤 오류가 발생합니까? 헤더 파일 (나는이 문제와 관련이 전혀 없다고 생각하지 않습니다)에서만 추측하기가 거의 불가능할 것입니다. – drescherjm

+1

"오류가 발생했습니다"라는 점을 좀 더 구체적으로 설명해 주시겠습니까? 또한 제공하는 코드로는 문제를 진단하기에 충분하지 않습니다. –

+1

이미지를 OpenCV 형식에서 Qt imge로 (또는 Qt에서 이미지를 표시하기 위해 사용하고있는 것) 변환하는 코드 부분을 게시 할 수 있습니까? – MeloMCR

답변

0

시도는 회색 이미지를 보여줍니다 .... 노력하고 있습니다 내 windows7 컴퓨터를 업데이 트하고 위의 프로그램을 재 컴파일하고 그것을 놀라게! 그 정말 이상한 ... 나는 (적어도 내가 anythin 상당히 다른 remenber 수 없습니다) 프로그램을 변경하지 않았지만 ..... 코모도 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

위의 코드가 작동합니다. inteire 프로그램을 일반 C++로 만들고 작동합니다. 내가 가진 문제는 일반 코딩에서 수행 한 기능을 실행하는 GUI를 추가하는 것입니다. 버튼을 누르면 이미지를 그레이 스케일로 변환하고, 임계 값은 등고선을 찾습니다. 버튼을 누르면이 경우 이미지를 변환하는 첫 번째 작업에서 오류가 발생합니다. 그레이 스케일로. –

+1

"qt"작성자를 사용하여 콘솔 용 일반 C++이 수행되었습니다. –

+0

U는 IplImage와 C 인터페이스를 시도 했습니까? –

관련 문제