Qt + OpenCV 灰度误差

Qt + OpenCV grayscale error

本文关键字:误差 灰度 OpenCV Qt      更新时间:2023-10-16

我一直在尝试使用OpenCV为图像处理任务制作一个简单的界面,C++使用Qt作为GUI。我能够通过 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 错误:断言失败 (scn == 3 || scn == 4) 在 cvtColor,文件 C:\OpenCV\modules\imgproc\src\color.cpp,第 2834 行程序意外完成。

弹出窗口错误:

Microsoft视觉C++

此应用程序以异常方式请求终止。

#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 文件...

更新我的 Windows7 机器后,我重新编译了上面的程序,并惊讶地它工作了!真的很奇怪...我没有对程序进行任何更改(至少我不能做任何显着不同的事情),但是重新安装 comodo firewal 后它起作用了.....谢谢大家的帮助。