aihot  2017-04-30 19:00:40  OpenCV |   查看评论   
    Ui::qttest1Class ui;  
  •     cv::Mat image;  // cv图片  
  •   
  • private slots:  
  •     void on_OpenImage_clicked();  
  • };  
  •   
  • #endif // QTTEST1_H  


  • 接下来添加on_OpenImage_clicked的函数内容。代码如下:

    1. void qttest1::on_OpenImage_clicked()  
    2. {  
    3.     QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.jpeg *.bmp)"));  
    4.     image = cv::imread(fileName.toAscii().data());  
    5.     cv::namedWindow("Original Image");  
    6.     cv::imshow("Original Image", image);  
    7. }  


    类似的办法添加Process按钮的相应代码:

    1. void qttest1::on_Process_clicked()  
    2. {  
    3.     cv::flip(image, image, 1);  
    4.     cv::namedWindow("Output Image");  
    5.     cv::imshow("Output Image", image);  
    6. }  


    这样就可以实现一个普通的按钮响应。但我们的目的是将图片显示在对话框form中,这还需要进一步深入学习。与MFC中显示图片需要CvvImage类似,要想在Qt的Form中显示图片,图片的格式也必须为QImage,需要将cv::Mat的BGR通道顺序变换为RGBA,QImage的格式为Format_RGB32,调用cvtColor实现(这里例程里调用的为BGR2RGB,然后QImage的格式为Format_RGB888,但我试验显示结果是有问题的,故自己调整了一下)。(后经实验,BGR2RGB,Format_RGB888这组参数对于webcam视频是正确的,对于我当时的实验照片是不正确的,格式的问题真是混乱!!!)实现代码如下:

    1. cv::cvtColor(image, image, CV_BGR2RGBA);  
    2. QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB32);  
    3. QLabel *label = new QLabel(this);  
    4. label->move(200, 50);  
    5. label->setPixmap(QPixmap::fromImage(img));  
    6. label->resize(label->pixmap()->size());      
    7. label->show();  


    注意打开图片的路径不要有中文,最后的显示结果为

    OpenCV学习笔记(二十五)——OpenCV图形界面设计Qt+VS2008


    相关代码的下载地址为

     

    除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV学习笔记(二十五)——OpenCV图形界面设计Qt+VS2008

    留言与评论(共有 0 条评论)
       
    验证码:
    [lianlun]1[/lianlun]