OpenCV图像Mat格式转换为QT中QImage并显示在graphicsView上,出现错误

在下铧茗哥 2019-08-02 01:04:52


显示图片代码:
void MainWindow::OpenCameraVideo()
{

//thread1->start();

QImage ig = cameraM->VideoCamera();
//QImage imgGray_imgShow = ig.scaled(300, 300, Qt::KeepAspectRatio, Qt::FastTransformation);
//ig.load("testCamera.jpg");
SceneM->clear();
SceneM->addPixmap(QPixmap::fromImage(ig));
ui->graphicsView->setScene(SceneM);
ui->graphicsView->show();
//recvShowPicSignal(ig);


}

在ui->graphicsView->setScene(SceneM);这里就出现错误
图片返回函数代码:
QImage Camera::VideoCamera(){
Mat openCvImage;
try {
// 开始抓取c_countOfImagesToGrab images.
//相机默认设置连续抓取模式
cameraM.StartGrabbing(c_countOfImagesToGrab, GrabStrategy_LatestImageOnly);
//抓取结果数据指针
Pylon::CGrabResultPtr ptrGrabResult;
Pylon::CPylonImage pylonImage;


// 等待接收和恢复图像,超时时间设0置为5000 ms.
cameraM.RetrieveResult(5000, ptrGrabResult, Pylon::TimeoutHandling_ThrowException);
if (cameraM.IsGrabbing())
{
//如果图像抓取成功
if (ptrGrabResult->GrabSucceeded())
{
//将抓取的缓冲数据转化成pylon image.

formatConverterM.Convert(pylonImage, ptrGrabResult);
// 将 pylon image转成OpenCV image.
openCvImage = cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC3, (uint8_t *)pylonImage.GetBuffer());

}
}
const uchar*qImageBuffer = (const uchar*)openCvImage.data;
//CreateQImagewithsamedimensionsasinputMat
//Mat img;
//cvtColor(openCvImage, openCvImage, CV_BGR2RGB);
//QImage img=QImage(qImageBuffer, openCvImage.cols, openCvImage.rows, openCvImage.step, QImage::Format_Indexed8);
//QImage(openCvImage.data, openCvImage.cols, openCvImage.rows, openCvImage.step, QImage::Format_RGB32)
//imwrite("testCamera.jpg", openCvImage);

cameraM.StopGrabbing();
cv::cvtColor(openCvImage, openCvImage, CV_BGR2RGB);
QImage img= QImage((const unsigned char*)(openCvImage.data), openCvImage.cols, openCvImage.rows, openCvImage.cols*openCvImage.channels(), QImage::Format_RGB888);
return img;
}
catch (GenICam::GenericException &e)
{
// Error handling.
std::cout << "An exception occurred." << std::endl
<< e.GetDescription() << std::endl;
cameraM.StopGrabbing();
}

}
...全文
500 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
在下铧茗哥 2019-08-05
  • 打赏
  • 举报
回复
引用 2 楼 今天也要元气满满哦 的回复:
应该是跟你的mat有关系吧 if(mat.type()==CV_8UC1) { return img; } if(mat.type()==CV_8UC3) { return img.rgbSwapped(); }
多谢老哥
  • 打赏
  • 举报
回复
和你的QImage的这个参数有关系,QImage::Format_RGB888
  • 打赏
  • 举报
回复
应该是跟你的mat有关系吧
if(mat.type()==CV_8UC1)
{
return img;
}
if(mat.type()==CV_8UC3)
{
return img.rgbSwapped();
}
在下铧茗哥 2019-08-02
  • 打赏
  • 举报
回复
已解决 把那个函数的返回改为 return img.rgbSwapped(); 不明白为啥 ,应该是类型问题

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧