十五、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;
}
相关推荐
TechNomad10 小时前
十一、OpenCV中图形的绘制
opencv
Wnq1007213 小时前
如何在移动 的巡检机器人上,实现管道跑冒滴漏的视觉识别
数码相机·opencv·机器学习·计算机视觉·目标跟踪·自动驾驶
曾经的三心草1 天前
OpenCV4-直方图与傅里叶变换-项目实战-信用卡数字识别
python·opencv·计算机视觉
luoganttcc1 天前
在 orin 上 安装了 miniconda 如何使用 orin 内置的 opencv
人工智能·opencv·计算机视觉
JinchuanMaster1 天前
cv_bridge和openCV不兼容问题
人工智能·opencv·计算机视觉
heisd_11 天前
在编译opencv出现的问题
人工智能·opencv·计算机视觉
却道天凉_好个秋1 天前
OpenCV(十一):色彩空间转换
人工智能·opencv·计算机视觉
zy_destiny1 天前
【工业场景】用YOLOv8实现行人识别
人工智能·深度学习·opencv·算法·yolo·机器学习
黄晓魚1 天前
双目三维重建-2双目系统标定
opencv·计算机视觉·机器视觉·三维视觉