我也是第一次写知乎专栏,所以有些地方弄的不好,也请见谅。

首先我们明确自己目标---将自己所拥有的视频转换成为素描视频,所以我们得现有一段视频(如下即为我的示例视频)

https://www.zhihu.com/video/1111427650559651840


我们先学会进行图片处理(视频也就是很多张照片组成的)

src1 即可默认为我们事先载入的一张图片<可表示为 Mat src1=imread("1.jpg“);>

Mat gray,dst; //然后也就是我们在定义几个变量(图片其实也就是矩阵)

cvtColor(src1,gray,COLORBGR2GRAY); //将src1彩色图片转换成为灰色度图片(src1输入图片,gray为输出的灰色图片,COLOR_BGR2GRAY即可默认为输出灰色度图片),因为只有图片为灰色度,其才会有阈值<范围是0~255>(也就是下文的Threshold函数),同样这第三个参数也有很多种,有兴趣可以自己去找下。、

GaussianBlur(gray,dst,Size(3,3),0,0); //高斯去噪,其第一个参数为输入图像,第二个参数为输出图像,第三个也就是高斯内核(ksize.width,ksize.height)也就是横纵坐标方向下的模糊,但是它们都必须为正数且奇数,第四,第五个参数分别表示为高斯核函数在X,Y方向下的标准偏差,第六个参数一般有默认值我们可以不去管。(PS 我个人对这个函数理解即为将3x3的高斯内核函数去与原图像进行覆盖,在一个3x3的内核上,各个色素带的色素值进行加权平均,所以与原图像比较会形成较为模糊图像)貌似高斯模糊好像更加接近素描。

adpativeThreshold(dst, src1, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 2);<自适应阈值操作>第一、第二个参数同样为输入输出图像,第三个与第五个参数有联系,第四个参数int类型的自适应阈值算法,可以取值

ADAPTIVE_THRESH_GAUSSIAN_C:当取值为这时,阈值T(x,y)为blockSize*blockSize邻域内(x,y)j减去第七个参数的平均值

ADAPTIVE_THRESH_MEAN_C :当取值为这时,阈值T(x,y)为blockSize*blockSize邻域内(x,y)j减去第七个参数,然后与高斯窗交叉相关的加权和

第五个参数取值 THRESH_BINARY时

maxValue if(dst(x,y)>T(x,y))

输出像素= 0 <

THRESH_BINARY_INV时

0 if(dst(x,y)>T(x,y))

输出像素 = maxValue if(dst(x,y)<T(x,y))

第六个参数 用于计算阈值大小的一个像素邻域尺寸(blocksize),一般取值为3,5,7;

第七个参数被减量(可见上文)

为了使素描效果更好可以重复几次

Mat src2, src3, src4;

GaussianBlur(src1, src2, Size(3, 3), 0, 0);

//imshow("【蔡老师】", src2);

threshold(src2, src3, 200, 255, THRESH_BINARY);

//imshow("【蔡老师2】", src3);

Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));

morphologyEx(src3, src4, 1, element); //为开运算可以消除一些图像中的一些较小的黑点

GaussianBlur(src4, src4, Size(5, 5), 0, 0);

imshow("【蔡老师3】", src4); //即可显示出来

面我会将代码公布
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture("1.mp4"); //读入视频
//VideoWriter writer("cxk.avi", -1, 25.0, Size(320, 240));
Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));//获取当前帧的宽度与高度
VideoWriter writer;
writer.open("cxk.avi", -1, 20, size, false);
while (1)
{
Mat src1;
capture >> src1;
if (src1.empty())
{
break;
}
//imshow("【原图】", src1);
Mat gray, dst;
cvtColor(src1, gray, COLOR_BGR2GRAY);
GaussianBlur(gray, dst, Size(3, 3), 0, 0);
adaptiveThreshold(dst, src1, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 2);
//imshow("【蔡老师】", src1);
Mat src2, src3, src4;
GaussianBlur(src1, src2, Size(3, 3), 0, 0);
//imshow("【蔡老师】", src2);
threshold(src2, src3, 200, 255, THRESH_BINARY);
//imshow("【蔡老师2】", src3);
Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(src3, src4, 1, element);
//imshow("【蔡老师3】", src4);
GaussianBlur(src4, src4, Size(5, 5), 0, 0);
imshow("【蔡老师3】", src4);
writer << src4;
if (waitKey(20) == 27) //按下ESC键退出
break;
}
return 0;
}


https://www.zhihu.com/video/1111446072026804224

最后将视频播放后,会发现素描后的视频离奇的,大概有1.9G左右,此时需要下载软件将其内存压缩,推荐使用格式工厂感觉效果不错,差不多输出10多MB。


溜了溜了,明天还有课,感觉自己写的好垃圾,加上自己也是入门不久,也不是计算机专业之类的,很多算法原理我也不是很明白,只是通过效果图加上网上注解才算能勉强看懂,这就是我写那么多imshow()的原因。

最近一段时间弄出来了检测十字的程序找段时间更新掉hhhh(不过听说视频检测区别很大)溜了溜了,熬不住了。

c++ opencv 照片清晰度_opencv新手学习————素描视频(C++)相关推荐

  1. c++ opencv 照片清晰度_PS教程:旧照片翻新修复技巧

    旧照片翻新修复技巧--上色篇 修复后的图像 在上色之前,我们先必须对图像做一系列的色彩调整,这个阶段的步骤非常重要,上色是否能够精彩,上色前的图像处理占70%.那我们就来看看如何来处理这张图像. 执行 ...

  2. 新手学习opencv八---道路检测

    新手学习opencv八---道路检测 1)基础方法:hough变换 一般步骤: 1.读取图片或视频帧 2.边缘检测 3.hough变换检测图像或视频帧中的车道线段(直线) 4.标识检测结果 openc ...

  3. 你知道照片怎么变清晰吗?增强照片清晰度的方法

    相信很多小伙伴都会有这种的经历,去游玩时高高兴兴的拍照留念,结果拍出来的照片不是很尽人意.或者是画面还没聚焦好,就按下快门,导致拍摄出来的照片变模糊了.很多小伙伴遇到这种情况都很烦恼,照片丢了可惜,不 ...

  4. 做原画师需要学习素描吗?

    想要成为原画师,我们首先要知道原画师需要掌握的技能是哪些,而不是说原画师需不需要学习哪些技能,如果是这样子的话,明天或许你又会问原画师需要进行速写练习吗? 不如今天我们来总结一下,原画师到底需要学习什 ...

  5. dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码

    请直接访问原文章 dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码 https://hotdog29.com/?p=595 在 2019年7月7日 上张贴 由 hotdog发表回 ...

  6. Adobe Photoshop CC2020版本介绍-新手学习PS那个版本好?

    如何开始使用PS?新手学习PS哪个版本好?如何快速掌握PS?在等待有关PS的这些问题时,小编最近收到了许多这样的问题? adobe系统公司相信从事设计行业的人都不会陌生,Adobe系统公司旗下如图像处 ...

  7. 新手学习实记(十、在树莓派上做图形化界面)

    [前言] 校内实习制作--基于树莓派的云台人脸追踪系统.本文主要是记录我的操作和执行过程. 由于要同时准备考研,所以只能学习做一个简易的系统啦,希望能有收获叭. [个人情况(供看文章的同学参考): ① ...

  8. 新手学习实记(八、在树莓派上实现云台舵机目标追踪)

    [前言] 校内实习制作--基于树莓派的云台人脸追踪系统.本文主要是记录我的操作和执行过程. 由于要同时准备考研,所以只能学习做一个简易的系统啦,希望能有收获叭. [个人情况(供看文章的同学参考): ① ...

  9. opencv十四天入门学习——task1

    opencv十四天入门学习--task1 前言 1.计算机视觉简介 2.计算机视觉框架 2.1 传统框架 2.2 深度学习训练框架 2.3 深度学习部署框架 2.4 当前业界主流框架应用 3.open ...

最新文章

  1. 扫盲:关于Android手机内存ROM、RAM还有SD卡的解释
  2. 独家 | 将时间信息编码用于机器学习模型的三种编码时间信息作为特征的三种方法...
  3. 交叉验证 Cross-validation
  4. Xamarin Studio支持TypeScript开发
  5. Java调用js方法
  6. 嵌入式知识概要(1)
  7. node mysql json_Node.js JSON模块用法实例分析
  8. java单线程共享,「Java并发编程实战」之对象的共享
  9. 思科为计算机配置ip命令,使用CLI在交换机上配置IP地址设置
  10. 微星主板黑苹果_11.11黑苹果主机金牌装机单(intel篇)
  11. html5烟花特效代码,漂亮的JavaScript烟花特效代码
  12. Java的ActiveX控件_注册ActiveX控件的几种方法 - 镜花水月 - JavaEye技术网站
  13. Maya火球特效制作
  14. 计算机专业银行春招,哪些银行有春招
  15. native vlan设置错误导致无法访问的问题排查过程
  16. 特种光纤所需学习知识(光纤光学)
  17. 新生研讨课报告 计算机,机械工程新生研讨课报告.docx
  18. opencv 读取NV12格式(.yuv)文件,并转为RGB格式保存为JPG
  19. oracle查看多少表,oracle查看所有表及各表行数?
  20. php打字文本,怎么做打字效果视频 制作文字像打字那样出现并且有打字声音的视频 画面文字一个一个出...

热门文章

  1. 庆祝自己在博客园开通个人生涯第一个关于工作的博客
  2. java获得项目绝对路径
  3. Spring MVC 之拦截器(八)
  4. (多图) 基于Verilog HDL的FIR数字滤波器设计与仿真
  5. DirectX 9的坐标系统变换
  6. JAVA中类似C中memcpy功能
  7. Linux 磁盘坏道检测和修复
  8. *:教育产品 规范销售
  9. 2005-3-28 + 探索ASP.NET Forum (1) 最初的印象
  10. 斯坦德机器人收购_斯坦德机器人合伙人兼CMO王茂林:人是公司发展根本,多数企业都死于合伙人...