qt图像算法—图像的转置之c++实现(不调包)

【源码下载】GitCode,关键词【qt图像算法】

整套项目源码内容包含

[1].根据算法原理,编写纯c++源码,不调用外源库opencv 等;
[2].包括各种图像处理的基本算法,包含腐蚀膨胀,缩放,转置,镜像,平移,均衡变化,灰度拉升,灰度阈值,灰度非线性,转灰度,灰度线性,旋转,简单平滑,高斯平滑,轮廓跟踪,种子算法,hough直线检测,拉普拉斯,带方向边缘检测,常规边缘检测(梯度算子、Roberts算子和Sobel算子),中值滤波,反色操作等;
[3].程序中有完整的注释,便于大家很好理解代码。

1.基本原理

图像的转置就是将图像的横坐标和纵坐标交换位置,和矩阵的转置是一样的,公式见下:

ad41f27f6bf7abd80ed3b626cd16a040.png

2.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解)

/*图像的转置函数*/
QImage* MainWindow::Transpose(QImage* image)
{
    QImage* newImage = new QImage(image->width(), image->height(),QImage::Format_ARGB32);


    unsigned char* copyPixel = NULL;
    unsigned char* objPixel = NULL;

    unsigned int tempJ = 0;

    for( int j = 0; j < image->height(); j++)
    {
        tempJ = j * image->width() * 4;
        for( int i = 0; i < image->width(); i++)
        {
            copyPixel = image->bits() + tempJ + i * 4;
            objPixel = newImage->bits() + i * image->height() * 4 + j * 4;
            memcpy(objPixel, copyPixel, 4);
        }
    }
    return newImage;
}

调用代码

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QImage image;;
    image.load("E:/BaiduNetdiskDownload/imgeCode/Lena.bmp");
    QImage* image1 = Transpose(&image);
    painter.drawImage(10,10, image);
 
    painter.drawImage(270,10,*image1);
 
}

运行结果

导航