zoukankan      html  css  js  c++  java
  • QImage 与 Mat 转换时图像倾斜

    一般Mat转换为QImage是这样的:

    Mat rgb;
     
        QImage img;
        if(mat.channels() == 3)    // RGB image
        {
     
            cvtColor(mat,rgb,CV_BGR2RGB);
            img = QImage((const uchar*)(rgb.data),  //(const unsigned char*)
                         rgb.cols,rgb.rows,
                         QImage::Format_RGB888);
        }else                     // gray image
        {
            img = QImage((const uchar*)(mat.data),
                         mat.cols,mat.rows,
                         QImage::Format_Indexed8);
        }
    

    但是如果宽度不是4的整数倍,则图像会发生倾斜:
    QImage转换为Format_RGB888等格式时,每行会按4字节(32位)对齐,不足则自动补齐

    但是rgb.data中的数据是没有自动补齐的,所以会导致图像作为QImage显示时,会发生倾斜

    因此以上代码应改为如下:

     Mat rgb;
     
        QImage img;
        if(mat.channels() == 3)    // RGB image
        {
     
            cvtColor(mat,rgb,CV_BGR2RGB);
            img = QImage((const uchar*)(rgb.data),  //(const unsigned char*)
                         rgb.cols,rgb.rows,
                         rgb.cols*rgb.channels(),   //new
                         QImage::Format_RGB888);
        }else                     // gray image
        {
            img = QImage((const uchar*)(mat.data),
                         mat.cols,mat.rows,
                         mat.cols*mat.channels(),  //new
                         QImage::Format_Indexed8);
        }
    
  • 相关阅读:
    Longest Common Substring
    未完成 Anagrams
    strStr
    vim的学习笔记
    Compare Strings
    Two Strings Are Anagrams
    KMP算法
    [ 力扣活动0314 ] 300. 最长上升子序列
    [ 力扣活动0317 ] 1160. 拼写单词
    [ 力扣活动0313 ] 169. 多数元素
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/14628106.html
Copyright © 2011-2022 走看看