Mat转QImage
1 Mat QImage2cvMat(QImage image) 2 { 3 cv::Mat mat; 4 switch(image.format()) 5 { 6 case QImage::Format_ARGB32: 7 case QImage::Format_RGB32: 8 case QImage::Format_ARGB32_Premultiplied: 9 mat = cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.bits(), image.bytesPerLine()); 10 break; 11 case QImage::Format_RGB888: 12 mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.bits(), image.bytesPerLine()); 13 cv::cvtColor(mat, mat, CV_BGR2RGB); 14 break; 15 case QImage::Format_Indexed8: 16 mat = cv::Mat(image.height(), image.width(), CV_8UC1, (void*)image.bits(), image.bytesPerLine()); 17 break; 18 } 19 return mat; 20 }
QImage转Mat
1 QImage cvMat2QImage(const cv::Mat& mat) 2 { 3 // 8-bits unsigned, NO. OF CHANNELS = 1 4 if(mat.type() == CV_8UC1) 5 { 6 QImage image(mat.cols, mat.rows, QImage::Format_Indexed8); 7 // Set the color table (used to translate colour indexes to qRgb values) 8 image.setNumColors(256); 9 for(int i = 0; i < 256; i++) 10 { 11 image.setColor(i, qRgb(i, i, i)); 12 } 13 // Copy input Mat 14 uchar *pSrc = mat.data; 15 for(int row = 0; row < mat.rows; row ++) 16 { 17 uchar *pDest = image.scanLine(row); 18 memcpy(pDest, pSrc, mat.cols); 19 pSrc += mat.step; 20 } 21 return image; 22 } 23 // 8-bits unsigned, NO. OF CHANNELS = 3 24 else if(mat.type() == CV_8UC3) 25 { 26 // Copy input Mat 27 const uchar *pSrc = (const uchar*)mat.data; 28 // Create QImage with same dimensions as input Mat 29 QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_RGB888); 30 return image.rgbSwapped(); 31 } 32 else if(mat.type() == CV_8UC4) 33 { 34 // Copy input Mat 35 const uchar *pSrc = (const uchar*)mat.data; 36 // Create QImage with same dimensions as input Mat 37 QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32); 38 return image.copy(); 39 } 40 else 41 { 42 return QImage(); 43 } 44 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)