十五、OpenCV中的图像浮雕技术

文章目录

一、浮雕的基本概念

浮雕效果(Embossing) 本质上是一种基于边缘检测的图像滤波,它通过增强图像的亮度变化方向(梯度),模拟出"光照从某个方向照射"形成的明暗凹凸感。

浮雕滤波器会:

  • 强化图像的边缘信息;
  • 让一个方向的边缘变亮,反方向的边缘变暗;
  • 使平坦区域接近灰色,从而模拟凹凸感。

二、原理与常用卷积核

浮雕是通过卷积实现的。

常用的浮雕卷积核(Emboss Kernel)如下(以灰度图为例):

从左上到右下的浮雕方向:

cpp 复制代码
[-2 -1  0
 -1  1  1
  0  1  2]

从右上到左下的浮雕方向:

cpp 复制代码
[ 0  1  2
 -1  1  1
 -2 -1  0]

该卷积核的作用是:

  • 对图像进行方向性差分;
  • 将某个方向的像素强化(亮),另一个方向的像素削弱(暗)。

卷积后的像素值范围可能会超出 [0,255],所以需要加上灰度偏移(通常加上 128)让图像回到可显示范围。

三、OpenCV 实现步骤

  1. 读取图像
  2. 转换为灰度图
  3. 定义浮雕卷积核
  4. 使用 filter2D() 卷积
  5. 加上灰度偏移
  6. 显示结果

完整示例代码:

cpp 复制代码
#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;
}
相关推荐
深蓝电商API30 分钟前
图片验证码识别:pytesseract+opencv入门
人工智能·opencv·计算机视觉·pytesseract
Sagittarius_A*3 小时前
特征检测:SIFT 与 SURF(尺度不变 / 加速稳健特征)【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉·surf·sift
nLsUCWFJR6 小时前
(Matlab)基于贝叶斯优化卷积双向长短期记忆网络(CNN-BiLSTM)回归预测
opencv
南极星10059 小时前
我的创作纪念日--128天
java·python·opencv·职场和发展
一招定胜负1 天前
基于dlib和OpenCV的人脸替换技术详解
opencv·计算机视觉
勾股导航1 天前
OpenCV图像坐标系
人工智能·opencv·计算机视觉
格林威1 天前
Baumer相机玻璃制品裂纹自动检测:提高透明材质检测精度的 6 个关键步骤,附 OpenCV+Halcon 实战代码!
人工智能·opencv·视觉检测·材质·工业相机·sdk开发·堡盟相机
没有不重的名么2 天前
Multiple Object Tracking as ID Prediction
深度学习·opencv·计算机视觉·目标跟踪
愚者游世2 天前
Opencv知识点大纲
人工智能·opencv·计算机视觉
格林威2 天前
Baumer相机电池极耳对齐度检测:提升叠片工艺精度的 5 个实用方案,附 OpenCV+Halcon 实战代码!
人工智能·opencv·机器学习·计算机视觉·视觉检测·工业相机·堡盟相机