使用 OpenCV 得到图片线稿
2016-06-27 10:51
375 查看
前言
上篇文章介绍了 OpenCV 的配置方法,本篇介绍一个 OpenCV 的简单用例。使用 OpenCV 得到一张图片的线稿。效果图如下:原图
![](http://blog.qiji.tech/wp-content/uploads/2016/04/abc.jpg)
线稿图
![](http://blog.qiji.tech/wp-content/uploads/2016/04/dst1.jpg)
代码分析
#include <opencv2/opencv.hpp> #include <cv.h> #include <highgui.h> int _tmain(int argc, char ** argv) { cvNamedWindow("show2"); IplImage * src = cvLoadImage("abc.jpg",1); IplImage * dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1); IplImage *temp1 = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,3); cvCvtColor(src,dst,CV_RGBA2GRAY); cvMorphologyEx(dst,dst,temp1,NULL,CV_MOP_GRADIENT,1); cvThreshold(dst,dst,80,80,CV_THRESH_TRUNC); cvNot(dst,dst); cvShowImage("show2",dst); cvReleaseImage(&src); cvReleaseImage(&dst); cvReleaseImage(&temp1); cvWaitKey(); }
要实现此功能的代码很简单,只需要按上篇文章中的配置方法配置好 OpenCV,然后直接使用上述代码就可以了。注意,代码中图片的路径是相对路径,所以要把图片放在项目的文件夹下。
分析
现在我们来逐行介绍一下:第七行:创建一个现实图片的窗口;
第八行:加载一副图片;
第十行和第十一行:分别创建一副空的图片,其中 dst 用来接收装换后的图片,temp1 是转换过程中用到的中间变量。
第十二行:将原图片转换成灰度图片
第十三行:是实现转换的核心方法,这里我们使用了其形态梯度的方法。我个人的理解就是寻找图片的边缘。
第十四行:使转换的图片的线条的颜色均匀。
第十五行:对图片取反,为什么要取反稍后解释。
第十六行:显示最后的结果图片。
之后的代码就是释放资源。
现在来解释为什么要对十四行得到的图片进行取反:
其实第十四行代码结束后得到图片是这样的:
取反前的图片
![](http://blog.qiji.tech/wp-content/uploads/2016/04/dst2.jpg)
所以我们要对其取反才能得到我们想要的结果。由于本人也是刚刚接触 OpenCV 所以解释的可能不够严密,敬请谅解。如果有同学也想学习 OpenCV 大家可以交流共同学习。
相关文章推荐
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- C#实现图片加相框的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- 一起动手编写Android图片加载框架
- C++实现读取图片长度和宽度