QT -- QImage 转 OpenCV Mat

Qt5 中 QImage 转 OpenCV Mat 格式函数。

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
cv::Mat ImageMark::QImage2Mat(const QImage& image)
{
    switch(image.format())
    {
        // 8-bit, 4 channel
        case QImage::Format_ARGB32:
            break;
        case QImage::Format_ARGB32_Premultiplied:
            {
                cv::Mat mat(image.height(), image.width(),
                            CV_8UC4,
                            (void*)image.constBits(),
                            image.bytesPerLine());
                return mat.clone();
            }
             
        // 8-bit, 3 channel
        case QImage::Format_RGB32:
            {
                cv::Mat mat(image.height(),image.width(),
                            CV_8UC4,
                            (void*)image.constBits(),
                            image.bytesPerLine());
                 
                 // drop the all-white alpha channel
                cv::cvtColor(mat, mat, cv::COLOR_BGRA2BGR); 
                return mat.clone();
            }
        case QImage::Format_RGB888:
            {
                QImage swapped = inImage.rgbSwapped();
                cv::Mat mat(swapped.height(), swapped.width(),
                            CV_8UC3,
                            (void*)image.constBits(),
                            image.bytesPerLine());
                return mat.clone();
            }
             
        // 8-bit, 1 channel  
        case QImage::Format_Indexed8:
            {
                cv::Mat mat(image.height(),image.width(),
                            CV_8UC1,
                            (void*)image.constBits(),
                            image.bytesPerLine());
                return mat.clone();
            }
             
        // wrong
        default:
            qDebug() << "ERROR: QImage could not be converted to Mat.";   
            break;
    }
    return cv::Mat();
}

  

https://blog.csdn.net/kingkee/article/details/103366911?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160524886119724835834140%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=160524886119724835834140&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2

posted @   手磨咖啡  阅读(805)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示