QT圖片取模 彩色圖轉換為黑白圖


實現這個功能會碰到各種各樣的色彩的圖片,而背景色彩與目標輪廓色彩相差各異,我們需要用到黑白兩色的圖片,我們需要先把彩色圖片轉換為灰度圖,再把灰度圖轉換為黑白圖。

彩色圖片轉換為灰度圖算法一般是經驗法已經足夠了,Gray = 0.2989 * R + 0.5870 * G + 0.1140 * B,已經能夠勝任大部分的圖片使用,而且轉換出的圖片質量非常的棒。然后需要把圖片轉換成背白圖片。

我們通常會使用一個閥值作為黑白像素的分界點,大於閥值統一為白色,小於閥值統一為黑色。

QImage imagebk = imageDa;
    QImage imagegry = imageDa;

    for(int j = 0;j < imagebk.width();j++)
    {
        for(int k = 0;k < imagebk.height();k++)
        {
            //uchar gryColor = (qBlue(imagebk.pixel(j,k))*299)/1000 + (qRed(imagebk.pixel(j,k))*587)/1000 + (qGreen(imagebk.pixel(j,k))*114)/1000;
            uchar gryColor = (qBlue(imagebk.pixel(j,k))*114)/1000 + (qRed(imagebk.pixel(j,k))*299)/1000 + (qGreen(imagebk.pixel(j,k))*587)/1000;
            QColor vRGB = imagebk.pixel(j,k);
            vRGB.setRed(gryColor);
            vRGB.setGreen(gryColor);
            vRGB.setBlue(gryColor);
            vRGB.setAlpha(255);
            imagegry.setPixelColor(j,k,vRGB);

            if(gryColor > 128)
            {
                gryColor = 0xff;
            }
            else
            {
                gryColor = 0x00;
            }

            vRGB.setRed(gryColor);
            vRGB.setGreen(gryColor);
            vRGB.setBlue(gryColor);
            vRGB.setAlpha(255);
            imagebk.setPixelColor(j,k,vRGB);
        }
    }
    imagegry.save("C:/Users/Administrator/Desktop/myImagegry.png");
    imagebk.save("C:/Users/Administrator/Desktop/myImagebk.png");

下面是對一張彩色圖片的處理效果,中間是灰度圖,第三張是黑白圖。

第一組

u=1696053968,2389900790&fm=26&gp=0myImagegrymyImagebk

第二組

u=101516629,1823603130&fm=26&gp=0myImagegrymyImagebk

第三組

u=1792738448,2515560561&fm=11&gp=0myImagegrymyImagebk

還需要優化兩個問題:

問題1是圖片反色的問題,方便顯示設備顯示使用。

問題2是圖片黑白臨界閥值的問題,以便盡量的保留出細節。

圖片取模上位機界面如下:

捕獲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM