使用 OpenCV 得到图片线稿
来源:互联网 发布:淘宝漫步者官方旗舰店 编辑:程序博客网 时间:2024/05/17 09:39
前言
上篇文章介绍了 OpenCV 的配置方法,本篇介绍一个 OpenCV 的简单用例。使用 OpenCV 得到一张图片的线稿。效果图如下:
原图
线稿图
代码分析
#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 是转换过程中用到的中间变量。
第十二行:将原图片转换成灰度图片
第十三行:是实现转换的核心方法,这里我们使用了其形态梯度的方法。我个人的理解就是寻找图片的边缘。
第十四行:使转换的图片的线条的颜色均匀。
第十五行:对图片取反,为什么要取反稍后解释。
第十六行:显示最后的结果图片。
之后的代码就是释放资源。
现在来解释为什么要对十四行得到的图片进行取反:
其实第十四行代码结束后得到图片是这样的:
取反前的图片
所以我们要对其取反才能得到我们想要的结果。由于本人也是刚刚接触 OpenCV 所以解释的可能不够严密,敬请谅解。如果有同学也想学习 OpenCV 大家可以交流共同学习。
0 0
- 使用 OpenCV 得到图片线稿
- opencv载入图片,并得到行列值
- Opencv得到HOG特征(HOGDescriptor 的使用)
- 使用canvas合成图片并得到的启发
- opencv学习笔记--使用opencv打开一张图片
- opencv使用第一步 用opencv打开图片 视频 和摄像头
- BCB中使用opencv显示图片
- 使用opencv比较两个图片的相似性
- 使用Qt显示openCV矩阵图片
- 使用Qt显示openCV矩阵图片
- 使用OpenCV合成两张图片
- python使用opencv读取图片失败
- Opencv使用stitch实现图片拼接
- 使用opencv在图片中加入文字
- 使用opencv保存多张图片
- 使用opencv把图片拼接成视频
- asp.net 得到图片
- 得到图片的缩略图
- 简单的自定义View
- Redistribute
- xx.xcodeproj cannot be opened because the project file cannot be parsed.Xcode工程文件打不开
- 常规功能和模块自定义系统 (cfcmms)—051一对多(OneToMany)字段的加入
- [Leetcode]160. Intersection of Two Linked Lists
- 使用 OpenCV 得到图片线稿
- Java 流(Stream)、文件(File)和IO
- 第三章 DispatcherServlet详解
- Android 开发中屏蔽物理键盘
- ant编译java 和eclipse编译的差别
- 太用力的人跑不远
- An attempt by a client to checkout a Connection has timed out.
- Android开发之LayoutInflater的三种实例化方式
- 交换原理