作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

实现原理

浮雕:

浮雕效果就类似于在一个平面上呈现了一个图案,通过卷积处理可以实现,模板如下:

将图像任意点(i,j)赋值为I(i-1,j-1)-I(i+1,j+1)+128。

雕刻:

雕刻效果就类似于一个图案在一个平面内,通过卷积处理可以实现,模板如下:

将图像任意点(i,j)赋值为I(i+1,j+1)-I(i-1,j-1)+128。

功能函数代码

// 浮雕
cv::Mat Relief(cv::Mat src)
{CV_Assert(src.channels() == 3);int row = src.rows;int col = src.cols;cv::Mat temp = src.clone();for (int i = 1; i < row-1; ++i){uchar *s1 = src.ptr<uchar>(i - 1);uchar *s2 = src.ptr<uchar>(i + 1);uchar *t = temp.ptr<uchar>(i);for (int j = 1; j < col-1; ++j){for (int k = 0; k < 3; ++k){int RGB = s1[3 * (j - 1) + k] - s2[3 * (j + 1) + k] + 128;if (RGB < 0)RGB = 0;if (RGB > 255)RGB = 255;t[3*j+k] =(uchar)RGB;}}}return temp;
}// 雕刻
cv::Mat Sculpture(cv::Mat src)
{CV_Assert(src.channels() == 3);int row = src.rows;int col = src.cols;cv::Mat temp = src.clone();for (int i = 1; i < row - 1; ++i){uchar *s1 = src.ptr<uchar>(i - 1);uchar *s2 = src.ptr<uchar>(i + 1);uchar *t = temp.ptr<uchar>(i);for (int j = 1; j < col - 1; ++j){for (int k = 0; k < 3; ++k){int RGB = s2[3 * (j + 1) + k] - s1[3 * (j - 1) + k] + 128;if (RGB < 0)RGB = 0;if (RGB > 255)RGB = 255;t[3 * j + k] = (uchar)RGB;}}}return temp;
}

C++测试代码

#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;cv::Mat Relief(cv::Mat src);
cv::Mat Sculpture(cv::Mat src);int main()
{cv::Mat src = imread("dragon.jpg");cv::Mat result1 = Relief(src);cv::Mat result2 = Sculpture(src);cv::imshow("original", src);cv::imshow("relief", result1);cv::imshow("sculpture", result2);waitKey(0);return 0;
}// 浮雕
cv::Mat Relief(cv::Mat src)
{CV_Assert(src.channels() == 3);int row = src.rows;int col = src.cols;cv::Mat temp = src.clone();for (int i = 1; i < row-1; ++i){uchar *s1 = src.ptr<uchar>(i - 1);uchar *s2 = src.ptr<uchar>(i + 1);uchar *t = temp.ptr<uchar>(i);for (int j = 1; j < col-1; ++j){for (int k = 0; k < 3; ++k){int RGB = s1[3 * (j - 1) + k] - s2[3 * (j + 1) + k] + 128;if (RGB < 0)RGB = 0;if (RGB > 255)RGB = 255;t[3*j+k] =(uchar)RGB;}}}return temp;
}// 雕刻
cv::Mat Sculpture(cv::Mat src)
{CV_Assert(src.channels() == 3);int row = src.rows;int col = src.cols;cv::Mat temp = src.clone();for (int i = 1; i < row - 1; ++i){uchar *s1 = src.ptr<uchar>(i - 1);uchar *s2 = src.ptr<uchar>(i + 1);uchar *t = temp.ptr<uchar>(i);for (int j = 1; j < col - 1; ++j){for (int k = 0; k < 3; ++k){int RGB = s2[3 * (j + 1) + k] - s1[3 * (j - 1) + k] + 128;if (RGB < 0)RGB = 0;if (RGB > 255)RGB = 255;t[3 * j + k] = (uchar)RGB;}}}return temp;
}

测试效果

图1 原图

图2 浮雕效果

图3 雕刻效果

浮雕是呈现在平面外的,雕刻是在平面内的。

如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

OpenCV-浮雕雕刻效果相关推荐

  1. opencv滤镜-浮雕雕刻特效

    浮雕和雕刻 浮雕 浮雕的算法为,用当前像素点的前一个像素点灰度值减去后一个像素点的灰度值,所得结果加上128作为当前像素点的灰度值.原理的公式为 current(i, j) = current(j+1 ...

  2. 浮雕雕刻作业设计的一款雕刻机

    浮雕雕刻作业设计的一款雕刻机 木工浮雕雕刻机是专门设计出为木家具或工艺品进行浮雕作业的雕刻机,多用于硬木家具的浮雕雕刻和木雕工艺品浮雕雕刻.浮雕雕刻机的精度较高,但效率方面就比普通雕刻机要弱一些,其起 ...

  3. 使用OpenCV实现哈哈镜效果

    使用OpenCV实现哈哈镜效果 导入工具包 import cv2 import numpy as np import math from vcam import vcam,meshGen #导入pyt ...

  4. 雕刻效果的实现【OpenCV+QT】

    雕刻可以区分为凸雕和凹雕. 凸雕基右下角的点减去左上角的点, 凹雕是左上角的点减去右下角的点. [效果图] 因为进行了缩放,效果看起来差一些. 具体代码如下: [效果处理代码] void MainWi ...

  5. OpenCV_1浮雕和雕刻效果

    一,原图: 二,代码: //雕刻&浮雕 void Emboss() {Mat src = imread("D:\\test\\26.png");Mat img0(src.s ...

  6. opencv模拟景深效果

    简介 在htc的相机应用中发现了一个叫景深的拍照场景,然后练习着用opencv来模拟实现. hcl景深场景效果 本例实现效果 实现过程 要实现本例,需要用到两方面知识:1.图像的高斯模糊. 2.在图像 ...

  7. OpenCV 实现哈哈镜效果

    代码,有参考别人的代码 // haha_mirror.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostrea ...

  8. OpenCV图片漫画效果

    我们随手拍摄的照片,很难达到摄影师的水准,因此不管是手机上还是电脑内,都有一些软件可以添加特效让照片更好看,手机拍摄时也有即时的美化效果.不过我比较好奇漫画特效,但是一直在网上看到别人的成品而找不到针 ...

  9. opencv 简单美颜效果

    美颜效果采用:双边模糊(也称双边滤波)+掩膜操作 双边模糊bilateralFilter(src, dest, d=15, 150, 3) 15 –计算的半径,半径之内的像数都会被纳入计算,如果提供- ...

最新文章

  1. WeChat小程序授权机制踩坑请求头中设置cookie保持session
  2. tp5 cache缓存简单使用
  3. 解决Genymotion下载设备失败的方法(Connection Timeout)
  4. 中国人为什么学不会英语
  5. 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。
  6. java与c语言_Java与C语言的区别之我见
  7. [Java] 蓝桥杯 BEGIN-3 入门训练 圆的面积
  8. css学习_文本有关的样式属性、sublime快捷生成标签
  9. 微软认知语音服务 语音识别
  10. 在Exchange Server 2007中修改邮件接受域
  11. Weblogic常见故障常:JDBC Connection Pools
  12. 设计模式--模板方法(Template Method)
  13. P4 用verilog描述单周期CPU的学习笔记和总结(基于P3)
  14. matlab 光谱共聚焦,光谱共焦技术介绍.PDF
  15. 信天游:电视剧《血色浪漫》插曲-杜老汉-拜年
  16. aircrack-ng 介绍、功能测试及部分源码分析
  17. Android仿英雄联盟/斗鱼波形加载动画
  18. 大数据智能分析(BI)平台设计2--数据集
  19. 卡方检验--离散变量相关性分析--机器学习特征选择
  20. MTI-G-710/GNSS组合导航代码分析

热门文章

  1. Ormlite数据库
  2. 面对海量请求,缓存设计还应该考虑哪些问题?(转)
  3. js_ Math 方法
  4. 解决datepicker设置选中日期setDate不生效问题
  5. 编译mod_jk.so
  6. fedora下一些问题的解决方案汇总
  7. ABP理论之CSRF
  8. 仿途牛旅游APP项目开发
  9. Android基于mAppWidget实现手绘地图(一)--简介
  10. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]