qt高斯滤波图像示例代码
时间: 2023-03-28 10:01:40 浏览: 127
Qt开发资源[Qt 5开发及实例(第4版)]陆文周 第21章 OpenCV实例 [程序源代码]
以下是一个使用 Qt 实现高斯滤波的示例代码:
```cpp
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QImage image("example.jpg");
QImage result(image.size(), QImage::Format_RGB32);
int kernelSize = 5;
double sigma = 1.;
// 计算高斯核
QVector<double> kernel(kernelSize * kernelSize);
double sum = .;
for (int i = ; i < kernelSize; i++) {
for (int j = ; j < kernelSize; j++) {
int index = i * kernelSize + j;
double x = i - kernelSize / 2;
double y = j - kernelSize / 2;
kernel[index] = exp(-(x * x + y * y) / (2 * sigma * sigma));
sum += kernel[index];
}
}
for (int i = ; i < kernelSize * kernelSize; i++) {
kernel[i] /= sum;
}
// 对每个像素进行卷积
for (int x = ; x < image.width(); x++) {
for (int y = ; y < image.height(); y++) {
double r = ., g = ., b = .;
for (int i = ; i < kernelSize; i++) {
for (int j = ; j < kernelSize; j++) {
int index = i * kernelSize + j;
int px = qBound(, x + i - kernelSize / 2, image.width() - 1);
int py = qBound(, y + j - kernelSize / 2, image.height() - 1);
QRgb color = image.pixel(px, py);
r += qRed(color) * kernel[index];
g += qGreen(color) * kernel[index];
b += qBlue(color) * kernel[index];
}
}
result.setPixel(x, y, qRgb(r, g, b));
}
}
// 显示结果
QLabel label;
label.setPixmap(QPixmap::fromImage(result));
label.show();
return app.exec();
}
```
这个示例代码实现了一个简单的高斯滤波器,可以对一张图片进行模糊处理。具体实现过程是先计算出高斯核,然后对每个像素进行卷积,最后得到模糊后的图片。
阅读全文