十五、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;
}
相关推荐
_李小白1 天前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
xp_fangfei1 天前
通过 Marker(视觉标记)获取机器人位姿
opencv·机器人
Lhan.zzZ1 天前
笔记_2026.4.28_003
c++·笔记·qt·opencv
sali-tec1 天前
C# 基于OpenCv的视觉工作流-章56-OCR
图像处理·人工智能·opencv·算法·计算机视觉·ocr
_李小白2 天前
【android opencv学习笔记】Day 2: Mat类(图片数据结构体)
android·opencv·学习
Leon_Chenl2 天前
【已开源】【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统
深度学习·opencv·yolo·ffmpeg·音视频·边缘计算·人脸识别+检测
H Journey2 天前
常用知识总结C++、CMake、Linux
linux·c++·opencv·cmake
sali-tec4 天前
C# 基于OpenCv的视觉工作流-章53-QR二维码1
图像处理·人工智能·opencv·算法·计算机视觉
星辰徐哥4 天前
OpenCV入门:Windows系统下OpenCV的安装与环境配置
人工智能·windows·opencv
Jun6264 天前
【树莓派】opencv水滴接触角测量
人工智能·opencv·计算机视觉