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

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);}

运行结果