国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mat與QImage互相轉(zhuǎn)換

這篇具有很好參考價值的文章主要介紹了Mat與QImage互相轉(zhuǎn)換。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

Mat是opencv中的存儲圖像的容器,也是圖像像素矩陣

QImage是Qt中存儲圖片常用的類

Qt和opencv經(jīng)常配合在一起使用,但Qt的函數(shù)方法的參數(shù)是不接受Mat的,所以如果我們想要在Qt中操作opencv處理后的圖像,就必須將Mat轉(zhuǎn)換成QImage

Mat->QImage

Mat轉(zhuǎn)換成QImage,可直接使用QImage的構(gòu)造函數(shù)進(jìn)行轉(zhuǎn)換,但要注意的是,當(dāng)Mat類型是CV_8UC3時,因為opencv色彩空間是BGR,Qt默認(rèn)是RGB,所以需要轉(zhuǎn)換,可以使用opencv中的cvtColor函數(shù)或者Qt中的rgbSwapped來進(jìn)行轉(zhuǎn)換,注意在QImage的生存周期內(nèi),必須保證Mat中的數(shù)據(jù)不會被釋放,否則QImage就會失效

解決方法:調(diào)用QImage::bits函數(shù)復(fù)制一份Mat數(shù)據(jù),這樣Mat釋放,QImage也能正常使用

QImage MainWindow::MatToImage(Mat &m) //Mat轉(zhuǎn)QImage
{
    //判斷m的類型,可能是CV_8UC1  CV_8UC2  CV_8UC3  CV_8UC4
    switch(m.type())
    { //QIamge 構(gòu)造函數(shù), ((const uchar *data, 寬(列),高(行), 一行共多少個(字節(jié))通道,寬度*字節(jié)數(shù),宏參數(shù))
    case CV_8UC1:
    {
        QImage img((uchar *)m.data,m.cols,m.rows,m.cols * 1,QImage::Format_Grayscale8);
        return img;
    }
        break;
    case CV_8UC3:   //一個像素點由三個字節(jié)組成
    {
        //cvtColor(m,m,COLOR_BGR2RGB); BGR轉(zhuǎn)RGB
        QImage img((uchar *)m.data,m.cols,m.rows,m.cols * 3,QImage::Format_RGB888);
        return img.rgbSwapped(); //opencv是BGR  Qt默認(rèn)是RGB  所以RGB順序轉(zhuǎn)換
    }
        break;
    case CV_8UC4:
    {
        QImage img((uchar *)m.data,m.cols,m.rows,m.cols * 4,QImage::Format_RGBA8888);
        return img;
    }
        break;
    default:
    {
        QImage img; //如果遇到一個圖片均不屬于這三種,返回一個空的圖片
        return img;
    }
    }
}

QImage->Mat

QImage轉(zhuǎn)換Mat,可直接使用Mat的構(gòu)造函數(shù)進(jìn)行轉(zhuǎn)換,通過QImage提供的format函數(shù)判斷圖片類型,分別case不同情況,注意,圖片類型遠(yuǎn)不止這些,這里只是列舉常見的灰度圖和彩色圖類型

Mat MainWindow::ImageToMat(QImage &image) //QImage轉(zhuǎn)Mat
{
    Mat mat = Mat::zeros(image.height(), image.width(),image.format()); //初始化Mat
    switch(image.format()) //判斷image的類型
    {
        case QImage::QImage::Format_Grayscale8:  //灰度圖
            mat = Mat(image.height(), image.width(),
            CV_8UC1,(void*)image.constBits(),image.bytesPerLine());
            break;
        case QImage::Format_RGB888: //3通道彩色
            mat = Mat(image.height(), image.width(),
                CV_8UC3,(void*)image.constBits(),image.bytesPerLine());
            break;
        case QImage::Format_ARGB32: //4通道彩色
            mat = Mat(image.height(), image.width(),
                CV_8UC4,(void*)image.constBits(),image.bytesPerLine());
            break;
        default:
            return mat;
    }
    return mat;
}

這篇文章對你有幫助的話就點個贊吧~

點贊收藏關(guān)注就是對我最大的支持~文章來源地址http://www.zghlxwxcb.cn/news/detail-584078.html

到了這里,關(guān)于Mat與QImage互相轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QT使用QImage做圖片切割

    QT使用QImage做圖片切割

    這里我使用的是深拷貝,什么叫深拷貝你們可以自行百度一下,我把一張圖片平均分成了四份,你們可以按照你們自己的需求更改代碼.主要就是: test.png就是原圖

    2024年02月10日
    瀏覽(13)
  • Qt QImage 顯示TIFF格式圖片

    Qt QImage 顯示TIFF格式圖片

    一,需求 利用Qt 控件 顯示 tiff 圖片,由于tiff圖像深度位96位,3通道,所以無法直接用QImage 顯示,QImage 支持24位,因此需要利用Opencv 進(jìn)行轉(zhuǎn)換。 二,關(guān)鍵點 (1),96位 深度需要利用?IMREAD_UNCHANGED 模式進(jìn)行加載 (2),加載后進(jìn)行 規(guī)一化,然后進(jìn)行位深 轉(zhuǎn)換,將32f 轉(zhuǎn)成8

    2024年02月15日
    瀏覽(25)
  • [pyqt5]opencv QPixmap QImage相互轉(zhuǎn)換

    提前約定: pixmap是QPixmap類型的變量 image是QImage類型的變量 QPixmap=QImage image = pixmap.toImage() QImage=QPixmap pixmap=QPixmap.fromImage(image) Opencv=Qimage 方法一: 方法二 方法三(推薦): Qimage=Opencv QPixmap=Opencv Opencv=QPixmap 可以現(xiàn)將Opencv轉(zhuǎn)Qimage,然后把Qimage轉(zhuǎn)Qpixmap

    2024年02月12日
    瀏覽(15)
  • QT QImage讀取與寫入保存圖像-圖像鏡像顯示

    QT QImage讀取與寫入保存圖像-圖像鏡像顯示

    QT QImage讀取與寫入保存圖像-圖像鏡像顯示 ? cpp文件

    2024年02月11日
    瀏覽(24)
  • QT圖像處理類QImage常見使用方法

    Qt 是一個跨平臺的 C++ 庫,提供了豐富的圖像處理功能,可以用來實現(xiàn)各種圖像處理任務(wù),例如圖像縮放、旋轉(zhuǎn)、灰度化、二值化等。本文將介紹使用 Qt 實現(xiàn)圖像處理的方法,并提供代碼示例。 在 Qt 中,可以使用 QImage 類型來加載和保存圖像,QImage 支持多種圖像格式,例如

    2024年02月03日
    瀏覽(25)
  • pyqt5 QImage QPixmap Opencv圖像 相互轉(zhuǎn)換

    只需要加上一行 QPixmap.fromImage(qimage) 即可 只需要加上一行 qimage = qpixmap.toImage() # 轉(zhuǎn)為Qimage 即可

    2024年04月09日
    瀏覽(17)
  • Qt QPixmap QImage 圖片等比例縮放到指定大小

    改變窗口組件的情況下改變窗口背景圖片的大小,QImage、QPixmap等繪圖設(shè)備類都提供scaled()函數(shù)。 ?scaled函數(shù): scaled(const QSize size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const ??第一個參數(shù)代表縮放后的尺寸 ??第二個

    2024年01月25日
    瀏覽(21)
  • linux+QT+FFmpeg 6.0,把多個QImage組合成一個視頻

    linux+QT+FFmpeg 6.0,把多個QImage組合成一個視頻

    我這里是專門搞了個類封裝,我把這個類當(dāng)成線程使用了,在啟動程序的時候直接當(dāng)線程啟動recordInit():比如這樣 ?然后我在需要合成視頻的時候先調(diào)用初始化: 再傳入QImage: 這樣就不會造成卡死主線程的情況 我在使用FFmpeg的時候主要出現(xiàn)兩個比較明顯的情況: 1.pix_fmt為-1的情況

    2024年02月11日
    瀏覽(15)
  • QT使用QImage制作圖片的四種(圓形,六邊形,復(fù)古與負(fù)片)效果(測試過效果的代碼)

    負(fù)片效果: 復(fù)古效果:? ?裁剪成圓形 ? 裁剪成六邊形: ?

    2024年02月13日
    瀏覽(26)
  • Opencv 基本操作四 指針數(shù)組、vector與Mat之間的相互轉(zhuǎn)換 | Mat切片成Vector<mat>并還原

    Opencv 基本操作四 指針數(shù)組、vector與Mat之間的相互轉(zhuǎn)換 | Mat切片成Vector<mat>并還原

    在深度學(xué)習(xí)模型部署中通常存在讀取圖像為mat,然后將mat轉(zhuǎn)換為float指針傳入模型的操作。為了快捷開發(fā),因此對指針數(shù)組、vector與Mat之間的相互轉(zhuǎn)換進(jìn)行整理。實現(xiàn)了指針數(shù)組、vector之間的相互轉(zhuǎn)換;vector與Mat之間的相互轉(zhuǎn)換(含單通道圖像和多通道圖像)。vector轉(zhuǎn)mat主要

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包