十五、OpenCV中的图像浮雕技术
文章目录
- 一、浮雕的基本概念
- 二、原理与常用卷积核
- 三、OpenCV 实现步骤
一、浮雕的基本概念
浮雕效果(Embossing) 本质上是一种基于边缘检测的图像滤波,它通过增强图像的亮度变化方向(梯度),模拟出“光照从某个方向照射”形成的明暗凹凸感。
浮雕滤波器会:
- 强化图像的边缘信息;
- 让一个方向的边缘变亮,反方向的边缘变暗;
- 使平坦区域接近灰色,从而模拟凹凸感。
二、原理与常用卷积核
浮雕是通过卷积实现的。
常用的浮雕卷积核(Emboss Kernel)如下(以灰度图为例):
从左上到右下的浮雕方向:
[-2 -1 0-1 1 10 1 2]
从右上到左下的浮雕方向:
[ 0 1 2-1 1 1-2 -1 0]
该卷积核的作用是:
- 对图像进行方向性差分;
- 将某个方向的像素强化(亮),另一个方向的像素削弱(暗)。
卷积后的像素值范围可能会超出 [0,255],所以需要加上灰度偏移(通常加上 128)让图像回到可显示范围。
三、OpenCV 实现步骤
- 读取图像
- 转换为灰度图
- 定义浮雕卷积核
- 使用 filter2D() 卷积
- 加上灰度偏移
- 显示结果
完整示例代码:
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;int main()
{// 1. 读取原图Mat src = imread("example.jpg");if (src.empty()) {cout << "无法读取图像!" << endl;return -1;}// 2. 转为灰度图Mat gray;cvtColor(src, gray, COLOR_BGR2GRAY);// 3. 定义浮雕卷积核(从左上到右下)Mat kernel = (Mat_<float>(3,3) << -2, -1, 0,-1, 1, 1,0, 1, 2);// 4. 卷积Mat embossed;filter2D(gray, embossed, CV_32F, kernel);// 5. 加偏移并裁剪到[0,255]embossed = embossed + 128;embossed.convertTo(embossed, CV_8U);// 6. 显示结果imshow("Original", gray);imshow("Embossed", embossed);waitKey(0);return 0;
}