qt+opencv图像在控件上的显示 槽和信号的定义.

1.opencv Mat图像数据在qt的label控件上显示

cv::Mat img;
img = cv::imread("./1115.jpg");
cv::cvtColor(img, img, CV_BGR2RGB); //因为Mat的图像数据是BGR,所以要先将img转化位RGB
QImage qImg = QImage((const unsigned char*)(img.data), img.cols, img.rows,
img.cols * img.channels(), QImage::Format_RGB888); //图像数据转化位QImage类型
ui->label->clear();                                //清空控件label
ui->label->setPixmap(QPixmap::fromImage(qImg));    //label赋值
ui->label->show();                                 //显示图像

2.重写void paintEvent(QPaintEvent *e)这个方法

  • paintEvent这个类是QT自带的,可以根据自己的需求重写这个类.
  • paintEvent可以理解成一个实时刷新的方法,可以用来视频的显示.
VideoCapture capture(0); //打开电脑自带摄像头
void MainWindow::paintEvent(QPaintEvent *e) //图像在label上实时显示
{
    cv::Mat img;
    capture>>img;
    cv::cvtColor(img, img, CV_BGR2RGB); //因为Mat的图像数据是BGR,所以要先将img转化位RGB
    QImage qImg = QImage((const unsigned char*)(img.data), img.cols, img.rows,
    img.cols * img.channels(), QImage::Format_RGB888); //图像数据转化位QImage类型
    ui->label->clear();                                //清空控件label
    ui->label->setPixmap(QPixmap::fromImage(qImg));    //label赋值
    ui->label->show();           
}

3.qt每个控件都可以有多个信号,多个槽

  • 信号可以理解为点击按钮这个动作或点击鼠标等类似情况.
  • 槽就是对应的信号执行的方法,比如点击按钮打开摄像头,点击按钮就是信号,打开摄像头就是槽.
//定义一个pushButton按钮下面就是对应的槽
void MainWindow::on_pushButton_clicked()
{
    //编写需求代码
}

猜你喜欢

转载自blog.csdn.net/jmu201521121021/article/details/78542944