Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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++ 为什么我的Qt5 QPixmap不能正确显示使用某些OpenCV算法处理的帧?_C++_Multithreading_Opencv_Image Processing_Qt5 - Fatal编程技术网

C++ 为什么我的Qt5 QPixmap不能正确显示使用某些OpenCV算法处理的帧?

C++ 为什么我的Qt5 QPixmap不能正确显示使用某些OpenCV算法处理的帧?,c++,multithreading,opencv,image-processing,qt5,C++,Multithreading,Opencv,Image Processing,Qt5,提前感谢您的支持 我使用OpenCV处理视频摄像机拍摄的视频帧,并在Qt5中实现的简单GUI中显示处理后的帧。在GUI中,使用标签中的QPixmap显示图像。OpenCV算法应该是正确的,因为如果我写输出是正确的,它们基本上是OpenCV提供的一些示例 我已经实现了不同的处理:对于从颜色到灰度的转换,以及对于二进制阈值(见图),结果都很好(相机的“视图”是正确的)。然而,当试图显示(“实时”)关键点检测(使用SURF-see图像-)和轮廓检测(使用Canny-see图像-)时,显示的图像是奇怪的

提前感谢您的支持

我使用OpenCV处理视频摄像机拍摄的视频帧,并在Qt5中实现的简单GUI中显示处理后的帧。在GUI中,使用标签中的QPixmap显示图像。OpenCV算法应该是正确的,因为如果我写输出是正确的,它们基本上是OpenCV提供的一些示例

我已经实现了不同的处理:对于从颜色到灰度的转换,以及对于二进制阈值(见图),结果都很好(相机的“视图”是正确的)。然而,当试图显示(“实时”)关键点检测(使用SURF-see图像-)和轮廓检测(使用Canny-see图像-)时,显示的图像是奇怪的

主要问题是,它们似乎同时“更接近”(见)和“加倍”(见)

在我使用的Qt代码中:

ui->labelView->setScaledContents(true);
我使用以下方法将已处理的OpenCV帧转换为QImage:

QImage output((const unsigned char*) _frameProcessed.data, _frameProcessed.cols, _frameProcessed.rows, QImage::Format_Indexed8);
ui->labelView->setPixmap(QPixmap::fromImage(frame));
我使用以下方式显示图像:

QImage output((const unsigned char*) _frameProcessed.data, _frameProcessed.cols, _frameProcessed.rows, QImage::Format_Indexed8);
ui->labelView->setPixmap(QPixmap::fromImage(frame));
GUI和OpenCV处理在不同的线程中运行:我在初始设置中将图像处理移动到一个线程

如果你需要更多的信息,请告诉我

提前非常感谢

致以最良好的祝愿


正如所指出的,这与图像的格式有关。我发现提供了在OpenCv和Qt格式之间进行自动转换的函数。

正如我所指出的,这与图像的格式有关。我发现提供了在OpenCv和Qt格式之间自动转换的函数。

一些OpenCv函数创建自己的输出图像。你确定格式符合你的期望吗?我会仔细检查输出格式以及OpenCV图像和QPixmap之间的转换,并给出反馈。这是我的一个假设,但我不知道错误在哪里。我的另一个想法是,它与那些算法的处理时间和多线程有关,因为这发生在更耗时的算法上……你能尝试创建一些简化的测试代码来进行测试而不出现异步行为(不使用两个不同的线程)吗?最后我找到了一个解决方案。正如您所指出的,这与图像格式有关。使用这个方便的标题很容易解决这个问题:它包含一组用于在Cv和Qt图像格式之间转换的函数。谢谢你的想法!一些opencv函数创建自己的输出图像。你确定格式符合你的期望吗?我会仔细检查输出格式以及OpenCV图像和QPixmap之间的转换,并给出反馈。这是我的一个假设,但我不知道错误在哪里。我的另一个想法是,它与那些算法的处理时间和多线程有关,因为这发生在更耗时的算法上……你能尝试创建一些简化的测试代码来进行测试而不出现异步行为(不使用两个不同的线程)吗?最后我找到了一个解决方案。正如您所指出的,这与图像格式有关。使用这个方便的标题很容易解决这个问题:它包含一组用于在Cv和Qt图像格式之间转换的函数。谢谢你的想法!