Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在表单之间传递cv::Mat img_C++_Qt_Opencv - Fatal编程技术网

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

C++ 在表单之间传递cv::Mat img,c++,qt,opencv,C++,Qt,Opencv,我在QtGUI应用程序的表单之间传递cv::mat数据时遇到问题,目前我只想在主窗口上传递用户选择的图像,并将其显示在结果页面上 void MainWindow::on_pushButton_clicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.bmp)")); Lateral= cv::imread(fi

我在QtGUI应用程序的表单之间传递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文件中,我定义了以下内容(我尝试了该方法的一些变体):-

最后,在新表单上,我有如下内容:-

 MainWindow Mw ;
cv::Mat op;
Mw.get_Lateral(op);
//(Mw.get_Posteroanterior()).copyTo(op);
cv::namedWindow("Lateral Image");
cv::imshow("Lateral Image",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);
}
当我运行此命令时,会出现运行时错误,因此我添加了一个if语句来检查cv::mat op的内容,如下所示:-

 MainWindow Mw ;
cv::Mat op;
Mw.get_Lateral(op);
//(Mw.get_Posteroanterior()).copyTo(op);
cv::namedWindow("Lateral Image");
cv::imshow("Lateral Image",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++是相当新的,所以我为任何公开的错误道歉。<
Cheers

正在丢弃get_横向的返回值-您需要通过引用对其进行适当修改:

void MainWindow::get_Lateral(cv::Mat& img ){
Lateral.copyTo(img);
//return img;
}
或者在main中重新分配给本地cv::Mat对象:

MainWindow Mw ;
cv::Mat op;
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);
}
看一看我将OpenCV与更大的应用程序集成在一起的经历。我不建议在Qt-GUI应用程序中使用highgui
imshow
函数。过去它为我做了一些奇怪的事情

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

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


希望这是有帮助的