一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

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 }
复制代码

 

posted on   一杯清酒邀明月  阅读(735)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示