gpt4 book ai didi

c++ - 在表单之间传递 cv::Mat img

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:03 25 4
gpt4 key购买 nike

我在 qt gui 应用程序的表单之间传递 cv::mat 数据时遇到问题,目前我只想传递用户在主窗口上选择的图像并将其显示在结果页面上

void MainWindow::on_pushButton_clicked() 
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.bmp)"));
Lateral= cv::imread(fileName.toAscii().data());
}

在我定义的主窗口的头文件中:-

public:
cv::Mat get_Lateral(cv::Mat img);
cv::Mat get_Posteroanterior();

在 MainWindow.cpp 文件中,我定义了以下内容(我尝试了该方法的几种变体):-

cv::Mat MainWindow::get_Lateral(cv::Mat img ){
Lateral.copyTo(img);
return img;
}

cv::Mat MainWindow::get_Posteroanterior(){
return Posteroanterior;
}

最后在新表格上我有这样的东西:-

 MainWindow Mw ;
cv::Mat op;
Mw.get_Lateral(op);
//(Mw.get_Posteroanterior()).copyTo(op);
cv::namedWindow("Lateral Image");
cv::imshow("Lateral Image",op);

当我运行它时出现运行时错误,所以我添加了一个 if 语句来检查 cv::mat op 的内容,如下所示:-

 MainWindow Mw ;
cv::Mat op;
Mw.get_Lateral(op);
//(Mw.get_Posteroanterior()).copyTo(op);
if (!op.data)
cv::namedWindow("dud Image");
else{
cv::namedWindow("Lateral Image");
cv::imshow("Lateral Image",op);
}

我得到了一个无用的图像窗口,暗示 op 是空的。

任何有关如何正确执行此过程的建议都将受到赞赏,我对 opencv 和 c++ 还很陌生,因此对于任何明显的错误我深表歉意。

干杯

最佳答案

看看我的 answer涉及将 OpenCV 与更大的应用程序集成。我不建议在 Qt GUI 应用程序中使用 highgui imshow 函数。它过去为我做了一些奇怪的事情。

基本上,您可以将 cv::Mat 转换为 QImage,然后使用 QGLWidget,或者只是简单地将其绘制到QPixmap如果你不是特别需要高速。

至于在表单之间传递 Mat 对象,您可以将其转换为 QImage 然后像我的示例所示那样使用信号/槽,或者如果您需要进一步操作 Mat 对象,您可以创建一个 QMetaType . QMetaType 将允许您跨表单传输它,就像传输任何其他 native Qt 对象一样。 Here是一个让您入门的 Qt 示例。

希望对您有所帮助!

关于c++ - 在表单之间传递 cv::Mat img,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8020210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com