天天看點

Qt中IplImage轉QImage

        本文隻針對IplImage轉QImage,對于做圖像處理的朋友,經常需要利用opencv,而opencv中圖像類型是IplImage,那麼最後處理完成的IplImage圖像需要轉成QImage在Qt中展示出來。這是不可避免的過程。

        網上很多方法講的都是利用QImage自己的構造函數,但是都是基于彩色圖像的。我們做圖像處理的知道,一般處理的都是原圖轉的灰階圖,即IplImage就已是灰階圖了,是以網上的這些方案都不可行。有的說将QImage::Format_RGB888改為QImage::Format_Indexed8可以,不過我試過不行。是以,最後找到的方法是自己寫代碼實作灰階圖IplImage向QImage的轉換,函數代碼如下:

QImage IplImgToQImg(IplImage* cvimage)
{
    QImage destImage(cvimage->width,cvimage->height,QImage::Format_RGB32);
    for(int i = 0; i < cvimage->height; i++)
    {
        for(int j = 0; j < cvimage->width; j++)
        {
            int r,g,b;
            if(3 == cvimage->nChannels)
            {
                b=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j*3+0);
                g=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j*3+1);
                r=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j*3+2);
            }
            else if(1 == cvimage->nChannels)
            {
                b=(int)CV_IMAGE_ELEM(cvimage,uchar,i,j);
                g=b;
                r=b;
            }
                destImage.setPixel(j,i,qRgb(r,g,b));
         }
    }
    return destImage;
}
           

        代碼可用,對單通道(灰階)圖可以順利轉成QImage可見。