前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV实现图像转换为素描效果

OpenCV实现图像转换为素描效果

作者头像
Vaccae
发布2020-11-13 10:20:48
1.2K0
发布2020-11-13 10:20:48
举报
文章被收录于专栏:微卡智享微卡智享微卡智享

OpenCV图像转素描

我们在一些相机APP的功能里会看到有把照片转换为素描效果的,看起来就很高大上的感觉,今天我们也用OpenCV实现一下这个效果。

实现效果

先上一张经典的Lena的图片转换为素描效果的图片,左边是原图的效果,右边就是我们通过OpenCV的几行代码实现的一个素描的效果。

实现流程

微卡智享

图像转为素描的流程其实也挺简单的,一共就是四步即可实现。

#

实现流程

1

图像去色(转为灰度图)

2

图像取反

3

将取反后的图像进行高斯模糊

4

去色后的图像(灰度图)和取反模糊后的图像以混合模式为颜色减淡进行融合

代码实现

微卡智享

新建一个opencvsrctosumiao的项目,配置参见《VS2017配置OpenCV通用属性

01

图像去色

02

图像取反

实现图像取反可以有三种方式:

  • 遍历像素值直接用255去减
gray_inverse = Scalar(255, 255, 255) - gray;
  • 使用subtract函数
subtract(Scalar(255, 255, 255), gray, gray_inverse);
  • 通地位运算直接取反
gray_inverse = ~gray;

取反后的效果

03

将取反后的图像进行高斯模糊

对取反后的图像我们做一个高斯模糊,上图中的Size(15,15)和后面的两个50的参数可以自己根据实际情况设置,我这边试了几个后觉得这个效果还不错,就采用这两个值了。

高斯模糊后的效果

04

颜色减淡进行融合

上面这行代码也是在网上看到的,实现了颜色减淡的效果,致敬大牛。

颜色减淡效果

完整代码

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
  Mat gray, gray_inverse,dst;

  Mat src = imread("E:/DCIM/test3.jpg");
  if (!src.data) {
    cout << "读取图像失败" << endl;
    return -1;
  }
  imshow("src", src);

  //1.转为灰度图
  cvtColor(src, gray, COLOR_BGRA2GRAY);

  //2.图像取反,三种取反的方法
  //2.1 遍历像素直接用255去减
  //gray_inverse = Scalar(255, 255, 255) - gray;
  //2.2 用subtract函数
  //subtract(Scalar(255, 255, 255), 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, 255 - gray_inverse, dst, 255);
  imshow("dst", dst);


  waitKey(0);
  return 0;
}

换几张图的效果

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档