入门opencv,欢笑快乐每一天

这篇具有很好参考价值的文章主要介绍了入门opencv,欢笑快乐每一天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,期待与大家一同进步成长!!❤️

👀给大家推荐一款很火爆的刷题、面试求职网站👀

跟我一起来刷题吧

先上结果,已成习惯(以下只截取了一部分)

videowrite,python,python实战有趣的项目,opencv,python,人工智能,计算机视觉,目标检测

本篇文章主要分成四个部分。即

        ①原始视频逐帧提取

        ②逐帧合成新视频

        ③原始视频音频提取

        ④音视频合成最终有声完整视频

目录

前期准备

①原始视频逐帧提取

②逐帧合成新视频

③原始视频音频提取

④音视频合成最终有声完整视频

图片展示

总结


前期准备

        首先我们需要准备一个视频(最好是mp4格式的)

        文件目录如下(ikun文件夹可要可不要,因为待会会生成)

videowrite,python,python实战有趣的项目,opencv,python,人工智能,计算机视觉,目标检测

videowrite,python,python实战有趣的项目,opencv,python,人工智能,计算机视觉,目标检测

①原始视频逐帧提取

        首先,导入cv2 

import cv2

cap = cv2.VideoCapture('ikun.mp4')

fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
print('fps:', fps)
print('width:', width)
print('height:', height)
print('frames:', frames)
cv2.VideoCapture(0)中参数0表示默认为笔记本内置第一个摄像头,若想要读取已有的视频,则改为视频所在地址。如上面的cv2.VideoCapture('ikun.mp4')

接下来就是调用函数,查看视频的帧率、宽度、高度、以及视频中图片总数(一帧表示一张图片)

结果如下:注意(以下返回的结果,其数据类型都是float类型,而不是int类型)

fps: 25.01398992725238
width: 854.0
height: 480.0
frames: 1490.0

接下来我们创建一个用来存放提取出来的帧的文件夹,用os模块判断是否应该创建

# 创建一个新的目录,用来存放修改后的每一帧
path = 'ikun'
if not os.path.exists(path):
    os.mkdir(path)

接下来我们采用opencv非常常见的canny边缘检测

i = 0
while True:
    flag, frame = cap.read()
    # 转换成灰度
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 图像处理(平滑)平均
    blur = cv2.blur(gray, (3, 3))
    # 应用对数变换
    img_log = (np.log(blur+1)/(np.log(1+np.max(blur))))*255
    # 指定数据类型
    img_log = np.array(img_log, dtype=np.uint8)
    # 图像平滑:双边滤波器
    bilateral = cv2.bilateralFilter(img_log, 5, 75, 75)
    # 边缘检测
    edges = cv2.Canny(bilateral, 100, 200)
    # 形态闭合算子
    kernel = np.ones((5, 5), np.uint8)
    closing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)
    # todo
    # 创建特征检测方法,nfeatures参数0默认为500
    orb = cv2.ORB_create(nfeatures=1500)
    # 制作特色图片
    keypoints, descriptors = orb.detectAndCompute(closing, None)
    featuredImg = cv2.drawKeypoints(closing, keypoints, None)

    filename = path + '/{}.jpg'.format(str(i))
    print(filename)
    # 保存图片
    cv2.imwrite(filename, featuredImg)
    i = i + 1
    # 如果i大于图片总数,则退出
    if i > int(frames):
        break

        首先,检测边缘不需要彩色信息,因此转为灰度图,此外,边缘检测的算法对噪声很敏感,所以采用滤波器来改善边缘检测器的性能。

        接着我们使用OpenCV的ORB角点检测,ORB算法是FAST算法和BRIEF算法的结合,ORB可以用来对图像中的关键点快速创建特征向量,并用这些特征向量来识别图像中的对象。当然你也可以采用其他方法。

①实例化ORB

    orb = cv2.ORB_create(nfeatures=1500)

参数:

  • nfeatures:特征点的最大数量

②利用orb.detectAndCompute()检测关键点并计算

    keypoints, descriptors = orb.detectAndCompute(closing, None)

③将关键点检测结果绘制在图像上

cv2.drawKeypoints(image, keypoints, outputimage, color, flags)

参数:

  • image: 原始图像
  • keypoints:关键点信息,将其绘制在图像上
  • outputimage:输出图片,可以是原始图像
  • color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。
  • flags:绘图功能的标识设置

这里笔者搞得比较简单

    featuredImg = cv2.drawKeypoints(closing, keypoints, None)

④保存图片

    filename = path + '/{}.jpg'.format(str(i))
    # 保存图片
    cv2.imwrite(filename, featuredImg)

最后使用i判断是否将每张图都进行更改并保存。


②逐帧合成新视频

import cv2
size = (854, 480)
# todo
videowrite = cv2.VideoWriter('output_ikun.mp4', -1, 25, size)
# 'output_ikun.mp4'是视频保存的文件,25是帧数,size是图片尺寸
n = 1490
path = 'ikun'
'''1'''
# img_array = []
# for filename in ['ikun1/{0}.jpg'.format(i) for i in range(n)]:
#     # print(filename)
#     img = cv2.imread(filename)
#     if img is None:
#         print(filename + " is error!")
#         continue
#     img_array.append(img)
# for i in range(n):#把读取的图片文件写进去
#     videowrite.write(img_array[i])
# videowrite.release()
# print('end!')
'''2'''
# img_arr = []
# for i in range(n):
#     img = cv2.imread(path + "/{}.jpg".format(i))
#     img_arr.append(img)
# for i in range(n):
#     videowrite.write(img_arr[i])
# videowrite.release()
# print('end!')
'''3'''
for i in range(n):
    img = cv2.imread(path + "/{}.jpg".format(i))
    videowrite.write(img)
videowrite.release()
print('end!')

代码如上

其中size为①原始视频逐帧提取中获取到的宽和高(注意:这里的size笔者尝试了,应该要和获取到的宽和高一样,否则报错)

n就是获取到的总图片数

#注释掉的代码由于比较复杂,笔者将其简化在下面了。

③原始视频音频提取

import moviepy.editor as mp
def extract_audio(videos_file_path):
    # print(videos_file_path)
    # print(videos_file_path.split('.')[0])
    my_clip = mp.VideoFileClip(videos_file_path)
    my_clip.audio.write_audiofile(f'{videos_file_path.split(".")[0]}.mp3')

extract_audio('ikun.mp4')

        视频提取音频,这里笔者采用的是moviepy模块,这里就不细细道来了,之后有机会可以好好和大家讲一讲该模块。 

        这里的videos_file_path是原始视频地址。

④音视频合成最终有声完整视频

import moviepy.editor as mp

video = mp.VideoFileClip('output_ikun.mp4')
audio = mp.AudioFileClip('ikun.mp3')
video_merge = video.set_audio(audio)
video_merge.write_videofile('final_ikun.mp4')

同上

video是我们新制作的无声音的mp4;

audio是我们从原视频分离出来的音频; 

最终音视频合并在final_ikun.mp4中。


图片展示

videowrite,python,python实战有趣的项目,opencv,python,人工智能,计算机视觉,目标检测

呀,搞错了,这是下一期内容

videowrite,python,python实战有趣的项目,opencv,python,人工智能,计算机视觉,目标检测

以下是最终目录

videowrite,python,python实战有趣的项目,opencv,python,人工智能,计算机视觉,目标检测


总结

        学了以上内容,你会对opencv更加感兴趣,去尝试是否能调出更好的图片以及视频。

最重要的一点:本文仅探讨技术,采用上述的例子,只是希望你能对opencv更加感兴趣!!

下期预告:如上图的上图所示!文章来源地址https://www.toymoban.com/news/detail-650648.html

到了这里,关于入门opencv,欢笑快乐每一天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习Python7天入门计划--第一天-机器学习基础-讲人话

    机器学习Python7天入门计划 - 第一天: 机器学习基础 学习目标: 理解机器学习的基本概念和过程。 掌握基本的数据预处理技巧。 理解线性回归的原理和应用。 学习内容: 机器学习基础 什么是机器学习:机器学习是一种使计算机能够从数据中学习规律和模式的技术。 为什么

    2024年01月20日
    浏览(47)
  • 用python写生日快乐的程序,python编写生日快乐代码

    这篇文章主要介绍了生日快乐python新颖编程代码,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1前言 生活中除了给男神女神表白,还会遇到朋友过生日,所以小编今天就给大家带来了一个送给朋友的

    2024年02月21日
    浏览(76)
  • 【Git 从入门到精通】2023最新版的Git安装与卸载每一步附详细讲解

    首先去官网下载Git安装包,可以直接在百度搜索Git,以下几个网站都可以。也可以点击直达,官网上下载如果不科学上网的话还是很慢的,所以我准备了一份放在了百度网盘内,需要的可以去评论区拿。 当从上面网站或者百度网盘中下载完exe文件之后,咱们就可以开始安装了

    2024年02月16日
    浏览(55)
  • Opencv-Python入门———配置opencv-python环境

    1.1配置python环境及编译器(Pycharm)下载 进入Pycharm官网下载Pycharm   PyCharm: the Python IDE for Professional Developers by JetBrains https://www.jetbrains.com/pycharm/ 进入Python官网下载最新版本Python Download Python | Python.org https://www.python.org/downloads/ 安装细则可参照博客 (36条消息) python,pycharm的安装

    2024年02月11日
    浏览(37)
  • opencv快速入门【python]

    1.读入图像 使用cv2.imread()读取图像 2.显示图像 使用函数 cv2.imshow() 显示图像。 3.保存图像 使用函数cv2.imwrite()来保存函数 学习目标: 掌握用opencv绘制出不同几何图形 熟练应用如下函数:cv2.line(),cv2.circle(),cv2.rectangle() ,cv2.ellipse() ,cv2.putText() 等。 绘出几何图形的第一步就

    2024年02月02日
    浏览(37)
  • Python,Numpy 轻松实现矩阵每一列升序排列

    my_array.sort()改变有序数组并返回已排序数组。 np.sort(my_array)返回已排序数组的副本,因此原始数组不会改变。 以下是可选参数。 axis:int,可选—要排序的轴。默认值为-1,表示沿最后一个轴排序。 kind:{\\\'quicksort\\\',\\\'mergesort\\\',\\\'heapsort\\\',\\\'stable\\\'},可选—排序算法。默认为\\\'quic

    2024年02月11日
    浏览(43)
  • 【Python】【pandas】打印 DataFrame 的每一列数据类型。

    可以使用 dtypes 属性来打印 DataFrame 的每一列数据类型。 dtypes 属性返回一个 Series,其中包含每个列的名称和对应的数据类型。 以下是打印 DataFrame 每一列数据类型的示例代码: 这将输出一个包含列名和数据类型的 Series。每一行都代表 DataFrame 的一列,列名作为索引,数据类

    2024年02月14日
    浏览(46)
  • 快速入门opencv(python版)

    Open Source Computer Vision Library。OpenCV是一个(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法

    2024年02月04日
    浏览(42)
  • OpenCv快速入门(python版)

    OpenCV是一个(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 在学习过程中遇到问题最好

    2024年02月14日
    浏览(37)
  • OpenCV入门(C++/Python)-使用OpenCV裁剪图像(四)

    裁剪是为了从图像中删除所有不需要的物体或区域。甚至突出显示图像的特定功能。 使用OpenCV裁剪没有特定的功能,NumPy数组切片是工作。读取的每个图像都存储在2D数组中(对于每个颜色通道)。只需指定要裁剪区域的高度和宽度(以像素为单位),就可以完成 以下代码片

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包