看白癜风最好的医院是哪个 http://pf.39.net/bdfyy/bjzkbdfyy/
学更好的别人,
做更好的自己。
——《微卡智享》
本文长度为字,预计阅读4分钟OpenCV图像转素描
我们在一些相机APP的功能里会看到有把照片转换为素描效果的,看起来就很高大上的感觉,今天我们也用OpenCV实现一下这个效果。实现效果
先上一张经典的Lena的图片转换为素描效果的图片,左边是原图的效果,右边就是我们通过OpenCV的几行代码实现的一个素描的效果。实现流程
微卡智享图像转为素描的流程其实也挺简单的,一共就是四步即可实现。#实现流程1图像去色(转为灰度图)2图像取反3将取反后的图像进行高斯模糊4去色后的图像(灰度图)和取反模糊后的图像以混合模式为颜色减淡进行融合代码实现
微卡智享新建一个opencvsrctosumiao的项目,配置参见《VS配置OpenCV通用属性》01
图像去色
02
图像取反
实现图像取反可以有三种方式:
遍历像素值直接用去减
gray_inverse=Scalar(,,)-gray;
使用subtract函数
subtract(Scalar(,,),gray,gray_inverse);
通地位运算直接取反
gray_inverse=~gray;取反后的效果
03
将取反后的图像进行高斯模糊
对取反后的图像我们做一个高斯模糊,上图中的Size(15,15)和后面的两个50的参数可以自己根据实际情况设置,我这边试了几个后觉得这个效果还不错,就采用这两个值了。高斯模糊后的效果
04
颜色减淡进行融合
上面这行代码也是在网上看到的,实现了颜色减淡的效果,致敬大牛。颜色减淡效果
完整代码#includeopencv2/opencv.hpp#includeiostreamusingnamespacecv;usingnamespacestd;intmain(intargc,char**argv){Matgray,gray_inverse,dst;Matsrc=imread("E:/DCIM/test3.jpg");if(!src.data){cout"读取图像失败"endl;return-1;}imshow("src",src);//1.转为灰度图cvtColor(src,gray,COLOR_BGRA2GRAY);//2.图像取反,三种取反的方法//2.1遍历像素直接用去减//gray_inverse=Scalar(,,)-gray;//2.2用subtract函数//subtract(Scalar(,,),gray,gray_inverse);//2.3位运算直接取反gray_inverse=~gray;imshow("gray_inverse",gray_inverse);//3高斯模糊GaussianBlur(gray_inverse,gray_inverse,Size(15,15),50,50);imshow("GaussianBlur",gray_inverse);//4颜色减淡混合divide(gray,-gray_inverse,dst,);imshow("dst",dst);waitKey(0);return0;}换几张图的效果完扫描