OpenCV实现图像转换为漫画效果

本文实例为大家分享了OpenCV实现图像转换为漫画的具体代码,供大家参考,具体内容如下

From 《OpenCV By Example》

1、先canny提取图像的边缘并强化,翻转边缘为黑色,将像素值转换为0-1的值
2、将图像进行双边滤波处理,然后将像素值缩短为每10个灰度级为一个值
3、将前两步得到的结果相乘,显示结果

#include <iostream>

using namespace std;

#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"

using namespace cv;

int main()
{
 Mat img = imread("1.jpg");
 float radius = img.cols > img.rows ? (img.rows / 3) : (img.cols / 3);

 const double exponential_e = exp(1.0);
 /** EDgES **/
 // Apply median filter to remove possible noise
 Mat imgMedian;
 medianBlur(img, imgMedian, 7);
 // Detect edges with canny
 Mat imgCanny;
 Canny(imgMedian, imgCanny, 50, 150);
 // Dilate the edges
 Mat kernel = getStructuringElement(MORPH_RECT, Size(2, 2));
 dilate(imgCanny, imgCanny, kernel);

 // Scale edges values to 1 and invert values
 imgCanny = imgCanny / 255;
 imgCanny = 1 - imgCanny;
 // Use float values to allow multiply between 0 and 1
 Mat imgCannyf;
 imgCanny.convertTo(imgCannyf, CV_32FC3);
 // Blur the edgest to do smooth effect
 blur(imgCannyf, imgCannyf, Size(5, 5));

 /** COLOR **/
 // Apply bilateral filter to homogenizes color
 Mat imgBF;
 bilateralFilter(img, imgBF, 9, 150.0, 150.0);
 // truncate colors
 Mat result = imgBF / 25;
 result = result * 25;
 /** MERgES COLOR + EDgES **/
 // Create a 3 channles for edges
 Mat imgCanny3c;
 Mat cannyChannels[] = { imgCannyf, imgCannyf, imgCannyf };
 merge(cannyChannels, 3, imgCanny3c);
 // Convert color result to float
 Mat resultf;
 result.convertTo(resultf, CV_32FC3);
 // Multiply color and edges matrices
// cout << imgCanny3c << endl;
 multiply(resultf, imgCanny3c, resultf);
// cout << resultf << endl;
 // convert to 8 bits color
 resultf.convertTo(result, CV_8UC3);
 // Show image
 imshow("Result", result);

 waitKey(0);

 return 0;
}

原图为:

效果图为:

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

(0)

相关推荐

  • opencv实现图像颜色空间转换

    opencv常用的样色空间包括RGB, HSV和YUV等.RGB颜色空间是基于三基色原理二形成的,常用于图像显示系统中:HSV描述的色度,饱和度,亮度这些表示颜色得方法,常用于描述色彩变化:YUV是通过亮度和色度来描述颜色,色度由UV通道组合而成. opencv提供cvtColor(inputArray src, outputArray dst, int code, int dstCn = 0) src是输入图像原,可以是8位CV_8U或者16位CV_16U无符号整形,或者单精度浮点数CV_32

  • OpenCV实现图像转换为漫画效果

    本文实例为大家分享了OpenCV实现图像转换为漫画的具体代码,供大家参考,具体内容如下 From <OpenCV By Example> 1.先canny提取图像的边缘并强化,翻转边缘为黑色,将像素值转换为0-1的值 2.将图像进行双边滤波处理,然后将像素值缩短为每10个灰度级为一个值 3.将前两步得到的结果相乘,显示结果 #include <iostream> using namespace std; #include "opencv2/core.hpp" #

  • Java OpenCV实现图像镜像翻转效果

    本文实例为大家分享了Java OpenCV实现图像镜像翻转效果的具体代码,供大家参考,具体内容如下 主要使用OpenCV的flip()方法,可以实现图像的垂直.水平以及同时垂直镜像翻转. flip是Core的静态方法,用法为: public static void flip(Mat src, Mat dst, int flipCode) 参数说明: src:输入图像: dst:输出图像: flipCode: = 0 图像向下翻转 > 0 图像向右翻转 < 0 图像同时向下向右翻转 代码如下:

  • C++和OpenCV实现图像字符化效果

    目录 实现原理 功能函数代码 作者:翟天保Steven版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 图像字符化的意思是将图像以字符形式呈现,具有一定的娱乐价值.许多开发人员通过python实现该功能,C++实现的代码较少,因此本文通过C++和OpenCV实现,给予C++开发人员一些可供借鉴的思路. 图像字符化的实现流程如下: 1.将图像缩小,如缩小为原尺寸的二十分之一. 2.创建一个同原图尺寸一致的白色画布. 3.遍历缩小图像的灰度值,根据灰度值数值的不

  • OpenCV图片漫画效果的实现示例

    我们随手拍摄的照片,很难达到摄影师的水准,因此不管是手机上还是电脑内,都有一些软件可以添加特效让照片更好看,手机拍摄时也有即时的美化效果.不过我比较好奇漫画特效,但是一直在网上看到别人的成品而找不到针对性的软件,因此只有自己实现一下,虽然跟专业的还有差距,但效果还不错. 本次使用 OpenCV,采用 Python 实现. 对比现实中的画画,一般是先画出边缘轮廓使整体规划好,再填充颜色使其完整,因此在这里我们也采用这种方式.不过对图片直接操作与从零开始着笔不一样,要将原始图片进行两次不同的处理,再

  • Python+OpenCV实现将图像转换为二进制格式

    在学习tensorflow的过程中,有一个问题,tensorflow在训练的过程中读取的是二进制图像数据库文件,而不是图像文件,因此 在进行训练.测试之前需要将图像文件转换为二进制格式. 下面是我在ubuntu中使用python+OpenCV读取图像并转换为二进制格式文件的代码. #coding=utf-8 ''' Created on 2016年3月24日 使用Opencv读取图像将其保存为二进制格式文件,再读取该二进制文件,转换为图像进行显示 @author: hanchao ''' imp

  • opencv实现图像缩放效果

    本文实例为大家分享了opencv实现图像缩放效果的具体代码,供大家参考,具体内容如下 图像缩放: 图像缩放即对图像的大小进行调整,即放大或者缩小 cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参数: 实现代码: import cv2 as cv import matplotlib.pyplot as plt # 中文显示配置 plt.rcParams['font.sans-serif']=['SimHei'] # 用

  • opencv实现图像平移效果

    本文实例为大家分享了opencv实现图像平移效果的具体代码,供大家参考,具体内容如下 图像平移: 按照指定方向和距离,移动到相应位置 格式:cv.warpAffine(img,M,dsize) 参数: 实现代码: import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 中文显示配置 plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签 plt.rcPara

  • python Opencv计算图像相似度过程解析

    这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你儿子. 还有其他物品.什么桌子带腿.镜子反光能在里面倒影出东西,各种各样的特征,我们通过学习.归纳,自然而然能够很快识别分类出新物品.

  • 详解Python+OpenCV实现图像二值化

    目录 一.图像二值化 1.效果 2.源码 二.图像二值化(调节阈值) 1.源码一 2.源码二 一.图像二值化 1.效果 2.源码 import cv2 import numpy as np import matplotlib.pyplot as plt # img = cv2.imread('test.jpg') #这几行是对图像进行降噪处理,但事还存在一些问题. # dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21) # plt

  • Python使用 OpenCV 进行图像投影变换

    目录 投影变换(仿射变换) 在数学中,线性变换是将一个向量空间映射到另一个向量空间的函数,通常由矩阵实现.如果映射保留向量加法和标量乘法,则映射被认为是线性变换. 要将线性变换应用于向量(即,一个点的坐标,在我们的例子中——像素的 x 和 y 值),需要将该向量乘以表示线性变换的矩阵.作为输出,你将获得一个坐标转换后的向量. 投影变换可以用以下矩阵表示: 其中: 是一个旋转矩阵.该矩阵定义了将要执行的变换类型:缩放.旋转等. 是平移向量.它只是移动点. 是投影向量.对于仿射变换,该向量的所有元素

随机推荐