利用Qt的标准文件对话框及OpenCV创建窗口并显示图片

4 篇文章 0 订阅

包含头文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QNetworkInterface>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <QDebug>
#include <QFileDialog>
#include <Qstring>

在按键的信号槽函数中实现

//开图片利用Qt的标准文件对话框,利用OpenCV创建窗口并显示
void MainWindow::on_p_clicked()
{
    cv::Mat image;
    ui->p->close();
    QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),
                                   ".",tr("Image Files (*.png *.jpg *.bmp)"));
    qDebug()<<"filenames:"<<fileName;
    image = cv::imread(fileName.toLatin1().data());
    cv::namedWindow(fileName.toLatin1().data(),CV_WINDOW_AUTOSIZE);    //display use a new window
    cv::imshow(fileName.toLatin1().data(), image);
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现一个裁剪图片的软件,可以使用QtOpenCV库来处理图像,使用Visual Studio作为开发工具。以下是一些基本步骤: 1. 创建一个Qt桌面应用程序工程,并添加OpenCV文件。 2. 在Qt的界面设计师中创建一个窗口,并添加一个按钮和一个显示图片的标签控件。 3. 在按钮的槽函数中,使用OpenCV加载图片文件,并在标签控件中显示出来。 4. 实现鼠标事件处理函数,当用户在标签控件上进行鼠标操作时,记录下鼠标的位置信息。 5. 当用户松开鼠标时,根据鼠标的位置信息计算出裁剪区域,并使用OpenCV图片进行裁剪。 6. 将裁剪后的图片显示在标签控件中,或者保存到本地文件中。 代码示例: ```c++ // 引入OpenCV库 #include <opencv2/opencv.hpp> #include <QLabel> #include <QMouseEvent> #include <QFileDialog> using namespace cv; // 声明一个Mat对象用于存储图片 Mat srcImage; // 声明一个标签控件用于显示图片 QLabel* imageLabel; // 声明一个鼠标位置变量 Point startPoint, endPoint; // 加载图片 void loadImg() { // 打开文件对话框选择图片文件 QString fileName = QFileDialog::getOpenFileName(nullptr, "Open Image", ".", "Image Files(*.png *.jpg *.bmp)"); // 如果用户未选择文件,直接返回 if (fileName.isEmpty()) { return; } // 读取图片文件 srcImage = imread(fileName.toStdString()); // 如果读取失败,直接返回 if (srcImage.empty()) { return; } // 将Mat对象转换成Qt的图像对象 QImage img = QImage((const unsigned char*)(srcImage.data), srcImage.cols, srcImage.rows, QImage::Format_RGB888).rgbSwapped(); // 显示图片 imageLabel->setPixmap(QPixmap::fromImage(img)); } // 鼠标按下事件处理函数 void mousePressEvent(QMouseEvent* event) { startPoint = event->pos(); } // 鼠标松开事件处理函数 void mouseReleaseEvent(QMouseEvent* event) { endPoint = event->pos(); // 计算裁剪区域 int x = std::min(startPoint.x(), endPoint.x()); int y = std::min(startPoint.y(), endPoint.y()); int width = std::abs(startPoint.x() - endPoint.x()); int height = std::abs(startPoint.y() - endPoint.y()); // 裁剪图片 Mat dstImage = srcImage(Rect(x, y, width, height)); // 将Mat对象转换成Qt的图像对象 QImage img = QImage((const unsigned char*)(dstImage.data), dstImage.cols, dstImage.rows, QImage::Format_RGB888).rgbSwapped(); // 显示裁剪后的图片 imageLabel->setPixmap(QPixmap::fromImage(img)); } int main(int argc, char *argv[]) { // 初始化Qt应用程序 QApplication app(argc, argv); // 创建一个窗口 QWidget* window = new QWidget(); // 创建一个按钮 QPushButton* loadButton = new QPushButton("Load Image", window); // 创建一个标签控件 imageLabel = new QLabel(window); // 设置标签控件的大小和位置 imageLabel->setGeometry(10, 50, 780, 520); // 连接按钮的点击事件到loadImg函数 connect(loadButton, &QPushButton::clicked, loadImg); // 显示窗口 window->show(); // 运行Qt应用程序 return app.exec(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值