OpenCV-用图像处理作出素描图(给你的另一半试试吧)

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

场景需求

      今天心血来潮,想给女朋友做个素描图,就写个代码简单实现一下。

功能实现思路

      首先加载下原图,进行高斯模糊得到blur图,将原图和blur图进行除法运算,可以提取出纹理图,纹理涂本身已经有些素描的感觉了;为了加深效果,需要进一步处理,取纹理图的反转图再与blur进行一次除法运算,可以得到反色系的纹理图,然后反转即可实现加深效果。上述效果的实现其实很大程度上依赖于divide除法运算中对0点的处理,即除以0或者0被除都为0 ,所以有时需要进行反转,如果不反转,最后得到的可能就是纯色图了。

C++测试代码

#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;

int main()
{
	// 加载原始图片
	Mat src = imread("cheng.jpg", 0);

	// 高斯模糊
	Mat blur;
	GaussianBlur(src, blur, Size(15, 15), 0, 0);

	// 提取纹理
	Mat veins;
	divide(src, blur, veins, 255);

	// 加深处理
	Mat deepenb, deepena;
	divide(255-veins, blur, deepenb, 255);
	deepena = 255 - deepenb;

	imwrite("result.png", deepena);
	imshow("gray", src);
	imshow("blur", blur);
	imshow("veins", veins);
	imshow("result", deepena);
	waitKey(0);

	system("pause");
	return 0;
}

测试效果

图1 原图
图2 高斯滤波效果图
图3 纹理图
图4 最终效果图

       上述测试效果受高斯滤波的尺寸影响,素描图的实现方案有很多,我只是提供了一种比较简单的思路,我女朋友吐槽说有素描感觉,但是真正的素描图更有感觉,所以手绘还是牛逼。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

© 版权声明
THE END
喜欢就支持一下吧
点赞180 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容