学习OpenCV——用OpenCv画漫画

闲的时候用OpenCV画漫画也挺有意思,虽然效果不好(达不到上面所实现的效果),
参数需要调整,还是大头贴而且噪声小的图像比较合适
而且可以熟悉一下关于各种滤波的操作比如:双边滤波;
- #include "cv.h"
- #include "highgui.h"
- using namespace cv;
- using namespace std;
- int main()
- {
- string name="D:/cartoon0.jpg";
- Mat src1=imread(name,1);
- Mat img;
- //双边滤波,第3个参数d可以说d>5时不能实时处理,最后两个参数是sigma参数,一般相同,
- //<10时基本没效果, >150时漫画效果
- bilateralFilter(src1,img,5,150,150);
- bilateralFilter(img,src1,5,150,150);
- //img.copyTo(src1);
- imshow("bilateral",src1);
- waitKey(0);
- Mat src;
- cvtColor(src1,src,CV_BGR2GRAY);
- //粗线,越大越粗,但是会有大量噪点
- Mat imgL;
- //第三个参数ddepth表示目标图像的深度,ddepth=-1时,与原图像一致
- Laplacian(src,imgL,-1,3,1);
- imshow("Laplacian",imgL);
- waitKey(0);
- //细线
- Mat imgC;
- Canny(src,imgC,30,90);
- imshow("Canny",imgC);
- waitKey(0);
- Mat imgS,imgSx,imgSy,imgS0;
- Sobel(src,imgSx,-1,0,1);
- Sobel(src,imgSx,-1,1,0);
- imgS=imgSx+imgSy;
- Sobel(src,imgS0,-1,1,1);
- imshow("Sobel0",imgS0);
- imshow("Sobel",imgS);
- waitKey(0);
- Mat imgTotal;
- imgTotal=imgC+imgS+imgL;
- //imgTotal.convertTo(imgTotal,CV_32FC1);
- normalize(imgTotal,imgTotal,255,0,CV_MINMAX);
- GaussianBlur(imgTotal,imgTotal,Size(3,3),3);
- threshold(imgTotal,imgTotal,100,255,THRESH_BINARY_INV);
- imshow("Total",imgTotal);
- waitKey(0);
- Mat imgTotalC3;
- cvtColor(imgTotal,imgTotalC3,CV_GRAY2BGR);
- bitwise_and(src1,imgTotalC3,src1);
- imshow("Result",src1);
- waitKey(0);
- name.insert(11,"_edge");
- imwrite(name,src1);
- /*
- Mat img(imgTotal.rows,imgTotal.cols,CV_32FC1);
- for(int i=0;i<imgTotal.rows;i++)
- {
- //uchar* p=(uchar*)(imgTotal.ptr()+i*imgTotal.step);
- for(int j=0;j<imgTotal.cols;j++)
- {
- if(imgTotal.at<float>(i,j)==0)
- img.at<float>(i,j)=1;
- }
- }
- imshow("Reverse",img);
- waitKey(0);
- */
- /*
- Mat imgSc;
- Scharr(src,imgSc,-1,1,0);
- imshow("Scharr",imgSc);
- waitKey(0);
- */
- }


from: http://blog.csdn.net/yangtrees/article/details/7544481
学习OpenCV——用OpenCv画漫画的更多相关文章
- 基础学习笔记之opencv(6):实现将图片生成视频
基础学习笔记之opencv(6):实现将图片生成视频 在做实验的过程中.难免会读视频中的图片用来处理,相反将处理好的图片又整理输出为一个视频文件也是非经常常使用的. 以下就来讲讲基于opencv的C+ ...
- [OpenCV学习笔记1][OpenCV基本数据类型]
CvPoint基于二维整形坐标轴的点typedef struct CvPoint{int x; /* X 坐标, 通常以 0 为基点 */int y; /* y 坐标,通常以 0 为基点 */}CvP ...
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0 +VS 2013 开发环境配置
图片太多,具体过程参照: [OpenCV入门教程之一] 安装OpenCV:OpenCV 3.0.OpenCV 2.4.8.OpenCV 2.4.9 +VS 开发环境配置 说下我这边的设置: 选择deb ...
- [OpenCV] Install OpenCV 3.3 with DNN
OpenCV 3.3 Aug 3, 2017 OpenCV 3.3 has been released with greatly improved Deep Learning module and l ...
- 用python做数字油画或者从一幅画学习风格,去画另一幅画
1. 用python做数字油画 模块: pillow 2. 从一幅画学习风格,去画另一幅画 http://pytorch.org/tutorials/advanced/neural_style_tut ...
- Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练
在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资 ...
- 学习CV:《OpenCV 3计算机视觉Python语言实现第2版》中文PDF+英文PDF+代码
理解与计算机视觉相关的算法.模型以及OpenCV 3 API背后的基本概念,有助于开发现实世界中的各种应用程序(比如:安全和监视领域的工具). OpenCV 3是一种先进的计算机视觉库,可以用于各种图 ...
- openCV 和GDI画线效率对照
一. 因为项目须要,原来用GDI做的画线的功能.新的项目中考虑到垮平台的问题.打算用openCV来实现.故此做个效率对照. 二. 2点做一条线,来測试效率. 用了相同的画板大小---256*256的大 ...
- openCV 和GDI画线效率对比
一. 由于项目需要,原来用GDI做的画线的功能,新的项目中考虑到垮平台的问题,打算用openCV来实现,故此做个效率对比. 二. 2点做一条线,来测试效率. 用了同样的画板大小---256*256的大 ...
随机推荐
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
笔记本装的是windows 7旗舰版64位系统,使用的是MS Office 2007(Microsoft.ACE.OLEDB.12.0,32位程序),开发用的是Visual Studio 2010,我 ...
- Web--RSS
--用处:SEO,让别人订阅你的文章
- 七 mybatis的延迟加载
1 延迟加载 1.1 什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.coll ...
- eclipse如何修改dynamic web module version
eclipse如何修改dynamic web module version 一.修改工程属性: 右键eclipse的工程,选择属性,再选择Project Facets里面中选择Dynamic Web ...
- (leetcode)Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- CodeMIrror 简单使用
代码高亮是程序员的刚需,不管是在笔记类,论坛类,博客类web网站中,都对代码高亮提出要求,不高亮的代码阅读体验很差,codeMirror是一个前端代码高亮库,使用方便. codeMirror可以直接在 ...
- Swift-10--错误处理
如何优雅地抛出错误-- 抛出错误使用throw关键字. 某个错误被抛出时,那个地方的某部分代码必要要负责处理这个错误,比如纠正这个问题.尝试另外一种方式.或是给用户提示这个错误. ***4种处理错误的 ...
- sell- 获取邮箱的后缀
1. public static void main(String[] args) { System.out.println(getEmailSuffix("jim_chen28270@16 ...
- JavaScript:复选框事件的处理
复选框事件的处理 复选框本身也是多个组件的名字相同.所以在定义复选框的同事依然要使用document.all()取得全部的内容. 范例:操作复选框,要求是可以一个个去选择选项,也可以直接全选,全选按钮 ...
- C语言:其他进制数转换为十进制(方法一)
#include<stdio.h> #include<math.h> #include<string.h> //其他任意进制转换为十进制 int main() { ...