openCV学习记录:滤镜:交叉冲印
2016-02-03 05:09
274 查看
交叉冲印滤镜
交叉冲印还有一个名字叫正片负冲,经过该滤镜修饰的照片亮部变黄,暗部变蓝,色彩更加艳丽。
来一张Lena女神的效果图:
再来一张风景效果图:
完整版代码如下:
参考文章:
参考文章
交叉冲印还有一个名字叫正片负冲,经过该滤镜修饰的照片亮部变黄,暗部变蓝,色彩更加艳丽。
来一张Lena女神的效果图:
再来一张风景效果图:
完整版代码如下:
[code]#include<opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; void punchFilter(Mat &srcImage); int main(){ Mat srcImage = imread("lena.jpg");//图片在工程目录下,否则写绝对路径 if(!srcImage.data || srcImage.empty()){ cout<<"读入图片错误!"<<endl; return -1; } imshow("原图",srcImage); punchFilter(srcImage); waitKey(0); return 0; } void punchFilter(Mat &srcImage){ int rowNum = srcImage.rows; int colNum = srcImage.cols; int gray, value; int rMap[256], gMap[256], bMap[256]; for(int i = 0;i<256;i++) { value = i < 128 ? i : 256 - i; gray = (int)pow(value,3) >> 14; // value的3次方再除以16384 rMap[i] = i < 128 ? gray : 256 - gray; gray = (int)pow(value,2) >>7; // value的2次方再除以128 gMap[i] = i < 128 ? gray : 256 - gray; bMap[i] = i / 2 + 0x25;//0x25 = 37 } for(int j = 0;j<rowNum-1;j++){ uchar* data = srcImage.ptr<uchar>(j); for(int i = 0;i<colNum-1;i++){ int b = bMap[data[i*3]]; int g = gMap[data[i*3+1]]; int r = rMap[data[i*3+2]]; data[i*3] = min(255, max(0, b)); data[i*3+1] = min(255, max(0, g)); data[i*3+2] = min(255, max(0, r)); } } imshow("交叉冲印滤镜",srcImage); }
参考文章:
参考文章
相关文章推荐
- linux文件I/O
- linux运维实战练习-2016年1月19日-2月3日课程作业(练习)
- linux ubnutu配置
- 2016-2-3 linux基础学习9
- 2016-2-2 linux基础学习8
- 用十条命令在一分钟内检查Linux服务器性能
- Linux 下 mysql 的安装方法全过程 (V5.6.28)
- Linux IPC之共享内存
- Caused by: java.lang.RuntimeException: by java.lang.OutOfMemoryError: PermGen space(tomcat 启动时提示内存溢出)
- Linux多线程—条件变量
- 浏览器cannot read property 'msie' of undefined的解决方法
- 加链接太麻烦?使用 linkit 模块提升用户编辑体验
- 新网站是否应该使用 Drupal 8?
- 搭建nginx+tomcat+Java的负载均衡环境
- Linux下Java程序的启动shell脚本
- 网站代维相关详细说明
- 安全服务详细介绍和说明
- 服务器代维护价格和套餐以及详细介绍
- Linux环境下tomcat中项目不被加载问题
- 多个地区实行校车使用实时监控