Qt中cvMat与QImage,QPixmap的转换
QImage->cvMat:
Mat CameraThread::QImageTocvMat(QImage img) { Mat ToCvMat; switch (img.format()) { case QImage::Format_RGB888: ToCvMat = Mat(img.height(), img.width(), CV_8UC3, (void*)img.bits(), img.bytesPerLine()); cv::cvtColor(ToCvMat, ToCvMat, CV_BGR2RGB); break; case QImage::Format_ARGB32: case QImage::Format_RGB32: case QImage::Format_ARGB32_Premultiplied: ToCvMat = Mat(img.height(), img.width(), CV_8UC4, (void*)img.bits(), img.bytesPerLine()); break; case QImage::Format_Indexed8: ToCvMat = Mat(img.height(), img.width(), CV_8UC1, (void*)img.bits(), img.bytesPerLine()); break; } return ToCvMat; }
cvMat->QImage:
QImage CameraThread::cvMat2QImage(const cv::Mat& cvImg) { QImage qImg; if (cvImg.channels() == 3) //三通道彩色图像 { //CV_BGR2RGB cv::cvtColor(cvImg, cvImg, CV_RGB2BGR); qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_RGB888); } else if (cvImg.channels() == 1) //单通道(灰度图) { qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_Indexed8); QVector<QRgb> colorTable; for (int k = 0; k<256; ++k) { colorTable.push_back(qRgb(k, k, k)); } qImg.setColorTable(colorTable);//把qImg的颜色按像素点的颜色给设置 } else { qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, cvImg.cols*cvImg.channels(), QImage::Format_RGB888); } return qImg; }
QPixmap->QImage:
QPixmap pixmap; QImage image=pixmap.toImage();
QImage->QPixmap:
QImage image; QPixmap pixmap=QPixmap::fromImage(image);
原文:https://blog.csdn.net/weixin_39485901/article/details/88078406
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)