2

GUI に Qt を使用して C++ で OpenCV を使用して、画像処理タスク用のシンプルなインターフェイスを作成しようとしています。GUI から画像を読み込むことはできますが、pushbutton_3 を押して画像をグレースケールに変換すると、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) プログラムが予期せず終了しました。

ポップアップ ウィンドウ エラー:

マイクロソフト ビジュアル C++

このアプリケーションは、異常な方法で終了するように要求されました。

4

2 に答える 2

0

私は私のwindows7マシンを更新し、それが機能したことに驚いた後、上記のプログラムを再コンパイルしました!それは本当に奇妙です...私はプログラムに変更を加えませんでした(少なくとも、大幅に異なることを行うことを思い出すことはできません)が、comodoファイアウォールを再インストールした後は機能しました.....皆さんの助けに感謝します。

于 2012-10-03T07:40:33.703 に答える
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ファイルを含めてみてください...

于 2012-09-19T17:03:44.503 に答える