OpenCV实现彩色照片转换成素描卡通片

本文实例为大家分享了OpenCV实现彩色照片转换成素描卡通片的具体代码,供大家参考,具体内容如下

#include"stdafx.h"
//#include<cv.h>
//#include<highgui.h>

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
using namespace std;

int main()
{
 Mat src,smallImg,tmp,bigImg,gray,edges,masks,dst;
 const int MEDIAN_BLUR_FILTER_SIZE = 7;
 const int LAPLACIAN_FILTER_SIZE = 5;
 const int EDGES_THRESHOLD = 80;
 int repetitions = 7; // Repetitions for strong cartoon effect. 

 src = imread("pic.jpg");

 Size size = src.size();
 Size smallSize;
 smallSize.width = size.width/2;
 smallSize.height = size.height/2;
 smallImg = Mat(smallSize, CV_8UC3);
 tmp = Mat(smallSize, CV_8UC3);
 dst= Mat(size,CV_8UC3); 

 cvtColor(src,gray,CV_BGR2GRAY); 

 medianBlur(gray,gray,MEDIAN_BLUR_FILTER_SIZE); 

 Laplacian(gray, edges, CV_8U,LAPLACIAN_FILTER_SIZE); 

 threshold(edges, masks,EDGES_THRESHOLD,255, THRESH_BINARY_INV);
 imshow("sketch:)", masks);
 waitKey(10);

 resize(src, smallImg, smallSize, 0,0, INTER_LINEAR);
 for (int i=0; i<repetitions; i++)
 {
 int ksize = 9; // Filter size. Has a large effect on speed.
 double sigmaColor = 9; // Filter color strength.
 double sigmaSpace = 7; // Spatial strength. Affects speed.
 bilateralFilter(smallImg, tmp, ksize, sigmaColor, sigmaSpace);
 bilateralFilter(tmp, smallImg, ksize, sigmaColor, sigmaSpace);
 }
 resize(smallImg, bigImg, size, 0,0, INTER_LINEAR);
 bigImg.copyTo(dst,masks); 

 imshow("cartoon :)", dst);
 waitKey(0);
 return 0;
}

原图、素描图、卡通图效果依次为:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 对Python+opencv将图片生成视频的实例详解

    如下所示: import cv2 fps = 16 size = (width,height) videowriter = cv2.VideoWriter("a.avi",cv2.VideoWriter_fourcc('M','J','P','G'),fps,size) for i in range(1,200): img = cv2.imread('%d'.jpg % i) videowriter.write(img) 以上这篇对Python+opencv将图片生成视频的实例详解就是

  • python-opencv 将连续图片写成视频格式的方法

    如下所示: import cv2 import os #图片路径 im_dir = '/home/suanfa/data/out/201708231503440' #输出视频路径 video_dir = '/home/suanfa/data/out/201708231503440-1018.avi' #帧率 fps = 30 #图片数 num = 426 #图片尺寸 img_size = (841,1023) #fourcc = cv2.cv.CV_FOURCC('M','J','P','G')

  • OpenCV实现彩色照片转换成素描卡通片

    本文实例为大家分享了OpenCV实现彩色照片转换成素描卡通片的具体代码,供大家参考,具体内容如下 #include"stdafx.h" //#include<cv.h> //#include<highgui.h> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp&g

  • C++ OpenCV实战之文档照片转换成扫描文件

    目录 一.背景 二.基础知识 三.方案一:自动检测点 1.读取图片文件(进行了指定尺寸缩放) 2.创建直线类并计算两条直线的交点 3.图像边缘检测Canny 4.通过霍夫变换进行直线检测 5.求单应性矩阵 6.降噪和二值化 四.方案二:用户点选目标区域 1.命令行解析 2.鼠标事件 3.主函数实现 4.结果展示 五.总结 一.背景 前段时间都是基于Python的OpecCV进行一些学习和实践,但小的知识点并没有应用到实际的项目中:并且基于Python的版本的移植性.效率性都较差,在包含硬件的项目

  • python实现彩色图转换成灰度图

    本文实例为大家分享了python实现彩色图转换成灰度图的具体代码,供大家参考,具体内容如下 from PIL import Image import os # 图像组成:红绿蓝 (RGB)三原色组成 亮度(255,255,255) image = "Annie1.jpg" img = Image.open(image) img_all = "素描" + image new = Image.new("L", img.size, 255) width

  • python实现图片转换成素描和漫画格式

    本文实例为大家分享了python实现图片转换成素描和漫画格式的具体代码,供大家参考,具体内容如下 原图 图片转换后的成果 源码 # -*- coding: utf-8 -*- import cv2 from PIL import Image, ImageOps, ImageFilter # 转换成漫画风格 def toCarttonStyle(picturePath): # 设置输入输出路径和文件名称 imgInput_FileName = picturePath imgOutput_FileN

  • JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析

    本文实例讲述了JavaScript+Canvas实现彩色图片转换成黑白图片的方法.分享给大家供大家参考,具体如下: 1.convertToGray() 在主体代码中使用 canvas 元素的id来获取画布,并设置画布的宽和高为图片的宽和高,再将上下文初始化为2d画布:彩色图片加载完成后,使用 drawImage() 将图片加载到上下文,调用用于完成剩余绘制工作的 getColorData()和 putColorData():最后为myImage指定彩色图片的路径. 2.getColorData(

  • 基于python实现把图片转换成素描

    这篇文章主要介绍了基于python实现把图片转换成素描,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 导语: 你是否还在为当时年少时没有选择自己的梦想而伤心,是否还在为自己的无法成为绘画名家而苦恼,这一切都不需要担心.python都能帮你实现,诶!python怎么能画画呢,一些简单的图案没问题,但是我要是想画素描那肯定没有办法了呀! 需求分析: 通过python代码脚本,实现绘制素描 安装工具 pip install pillow pip in

  • JavaScript将base64图片转换成formData并通过AJAX提交的实现方法

    之前为了拍摄照片使用了webcam相关的插件,其拍摄后得到的是base64格式的图片,直接显示没问题,在src中直接指定就可以了,但是要上传到server时问题就来了,server端接收的是标准的文件,也就是html form中type="file"的形式.想要沿用这个接口不更改server端代码,于是尝试将base64直接转换成标准的fomeData并通过AJAX提交. 第一步,将base64转换成二进制图片(Blob) 主要思路是整理一下base64的前面几个字符,预处理以后转换成

  • Python 实现将数组/矩阵转换成Image类

    先说明一下为什么要将数组转换成Image类.我处理的图像是FITS (Flexible Image Transport System)文件,是一种灰度图像文件,也就是单通道图像. FITS图像的特点是灰度值取值为0~65535,这类图像在python下读成数组首先是不能直接转换成位图,也就不能用OpenCV.Image等方法了. 如果是普通的jpg图像,用自带的Image库就能实现很多功能. 下方的这幅图就是通过python下的Image库中的rotate函数实现的 接下来贴上代码. impor

  • python 将视频 通过视频帧转换成时间实例

    我就废话不多说了,还是直接看代码吧! def frames_to_timecode(framerate,frames): """ 视频 通过视频帧转换成时间 :param framerate: 视频帧率 :param frames: 当前视频帧数 :return:时间(00:00:01:01) """ return '{0:02d}:{1:02d}:{2:02d}:{3:02d}'.format(int(frames / (3600 * fram

  • python heic后缀图片文件转换成jpg格式的操作

    我就废话不多说了,直接上代码 heic_to_jpg.py import subprocess import os import io import whatimage import pyheif import traceback from PIL import Image def decodeImage(bytesIo): try: fmt = whatimage.identify_image(bytesIo) # print('fmt = ', fmt) if fmt in ['heic']

随机推荐