使用OpenCV读取视频、图片并做简单处理

news2024/9/27 7:24:17

1.OpenCV的安装与卸载

在conda中安装opencv,打开Anaconda Prompt 使用国内镜像源安装opencv,命令如下:

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

也可以安装opencv的另一个扩展包opencv-contrib-python,不安装扩展包也可以使用,命令如下:

pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple

卸载opencv,使用命令

pip uninstall opencv-python

Pycharm中没有cv2库的提示时,找到cv2安装的路径,将虚拟环境中的site-packages\cv2中的cv2.pyd复制一份到site-packages(也就是上一级目录),重启一下pycharm就可以了。解决pycharm中的cv2库没有提示的问题(Python3+win10+opencv-python 4.6.0.66)icon-default.png?t=MBR7https://blog.csdn.net/weixin_43490422/article/details/127091826

2.视频、图片的处理

需要引用以下库

import numpy as np
import cv2
import matplotlib.pyplot as plt
import pylab
img0 = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])

print(img0.shape)  # 打印img0的行数和列数

plt.imshow(img0, cmap = 'gray')
pylab.show()  # 需要此语句来调用显示

使用VideoCaptuure命令读取图像

# 从视频中读取图像,"01.mp4"可换为视频的绝对路径
cap = cv2.VideoCapture("01.mp4")
# 从摄像头中读取图像
cap = cv2.VideoCapture(0)

通过cap.isOpened()判断是否提取成功

print(cap.isOpened())

返回Ture则提取成功,返回Fluse则没有提取成功

# 读取视频中的一帧
return_value, frame = cap.read()
# 显示视频中的图像
plt.imshow(frame)
pylab.show()

改变读取视频画面或者图片颜色通道的各种方法

# 使用cv2.COLOR_BGR2RGB方法变换RGB三个通道的顺序
plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
# 将图片中的RGB三通道变为灰度通道
plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY))
# 将RGB图片转换为HSV
plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2HSV))
# 将图片二值化显示
img = cv2.imread("02.jpg")
_, img_bw = cv2.threshold(img,128,200,cv2.THRESH_BINARY)
plt.imshow(img_bw)
print(img_bw)

pylab.show()

图像的大小和缩放

# 图像的放大与缩小 ,宽|高
img = cv2.resize(img, (500, 300))
plt.imshow(img)
pylab.show()

roi:图像的截取

# roi:截取部分图片
img_roi = img[100:300, 0:200]
plt.imshow(img_roi)
pylab.show()

Affine变换:移动、缩放、旋转、拉伸

# 读取图片
img = cv2.imread("02.jpg")
# Affine变换:移动tx = 300,ty = 200,m为变换矩阵
# Affine缩放:x缩放 = 1,y缩放 = 2
m = np.float32([[1,0,300],[0, 2, 200]])  # m为变换矩阵
img_m = cv2.warpAffine(img, m, (500, 1000))  # 底图大小(500,1000)
plt.imshow(img_m)
pylab.show()

# Affine旋转:theta(弧度,180/3.14) ,move_x = x轴右移值,move_y = y轴下移值
theta = 0.5
move_x = 100
move_y = 50
m = np.float32([[np.cos(theta), -np.sin(theta), move_x], [np.sin(theta), np.cos(theta), move_y]])
cols = 800  # 底图宽度
rows = 500  # 底图高度
img_dst = cv2.warpAffine(img,m,(cols,rows))
plt.imshow(img_dst)
pylab.show()

# Affine拉伸:src = 源图像四边形顶点坐标 ;dst = 目标图像对应的四边形顶点坐标
src = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
dst = np.float32([[0, 0], [100, 0], [0, 300], [300, 300]])
m = cv2.getPerspectiveTransform(src, dst)  #通过src、dst计算得到变换矩阵
cols = 800  # 底图宽度
rows = 500  # 底图高度
img_dst = cv2.warpPerspective(img, m, (cols, rows))
plt.imshow(img_dst)
pylab.show()
图像模糊与锐化,高斯模糊类似于将图像梯度变平滑
# 读取图片
img = cv2.imread("02.jpg")
# 图像的模糊
img = cv2.GaussianBlur(img, (49, 49), 1, 0)  # 高斯模糊
pylab.show()

# 图像的锐化
kernel = np.ones((3, 3), np.float32) / 8
kernel = -kernel
kernel[0, :] = [-1, -1, -1]
kernel[1, :] = [0, 0, 0]
kernel[2, :] = [1, 1, 1]

result = cv2.filter2D(img, -1, kernel)
print(result.shape)
print(result[0, 0])
plt.imshow(result * 500)
pylab.show()

求图中图像的边缘

# 读取图片
img = cv2.imread("02.jpg")
# 求边缘
img_b = cv2.Canny(img,30,150)
plt.imshow(img_b)
pylab.show()

加水印

# 加水印,"watermask1.png"为水印图片
wm = cv2.imread("watermask1.png")
wm = cv2.resize(wm, (300, 300))
wm = 255 - wm
img1 = cv2.resize(img, (300, 300))
print(wm.shape)
plt.imshow(cv2.addWeighted(wm, 0.9, img1, 1, 0))  # 通过调节addWeighted函数权重可以调节图片亮度

pylab.show()

3.释放资源

在使用摄像头后及时释放,可以减小程序的内存消耗,提高运行流畅度

# 打印frame的形状
print(frame.shape)
# 释放摄像头
cap.release()
# 截图图像中的部分区域
roi = frame[100:400, 200:500]
plt.imshow(roi)
pylab.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos下使用yum安装Mysql8(Mysql5.7)以及常见的配置和使用

记录一下在centos7.x下面使用yum方式安装mysql8(Mysql5.7)关系型数据库安装之前一般需要先确定centos7.x服务器里是否已经安装,未安装或者刚初始化的centos7.x服务器最好安装,原来已经有的要升级的话一定要对系统原有mysql 或mariadb卸载干净&#xff0c…

系统测试的具体测试类型

系统测试:是为判断系统是否符合要求而对集成的软、硬件系统进行的测试活动、它是将已经集成好的软件系统,作为基于整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、人员、数据等其他系统元素结合在一起,在实际运行环…

Charles - 夜神模拟器证书安装App抓包

Charles - 夜神模拟器证书安装App抓包 文章目录Charles - 夜神模拟器证书安装App抓包前言一、软件安装1.Openssl安装1.1下载安装1.2配置环境变量1.3查看openssl版本,输入命令:openssl version2.夜神模拟器安装1.1 下载安装1.2工具准备,MT管理…

【Lilishop商城】No4-6.业务逻辑的代码开发,涉及到:接口入参、出参开发逻辑,及POJO的各种总结

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑,其中重点包括接口类、业务类,具体的结合源代…

完整iOS APP发布App Store上架流程指南

本文章的目的在于教会你如何创建ios的打包证书和如何上架假如你没有任何的打包或上架经验,参考本文有很大的收益。通常创建ios证书和上架,是需要MAC电脑的,本文重点介绍如何在没有mac电脑的情况下,创建mac证书和上架。假如你还没有…

STM32CUBEIDE-简单案例生成

STM32CUBEIDE-简单案例生成 京东链接:https://i-item.jd.com/66584659856.html 生成工程 使用STM32CUBEMX生成例程,这里使用STM32F103C8T6系统板。 新建一个工程,这里有3种新建工程方式。 ● 基于MCU/MPU新建工程 ● 基于ST模块新建工程 ●…

PCB板缺陷检测机器视觉识别算法 yolo

PCB板缺陷检测机器视觉识别算法通过pythonyolo系列网络深度学习模型对PCB电路板外观实时监测,当模型算法监测到有缺陷的PCB板时立即抓拍存档。Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行,主要是因为它的简单性和…

Vue2进阶笔记

Vue2进阶笔记一、基础知识1.1 computed计算属性1.2 watch监视属性1.3 动态绑定样式1.4 列表循环渲染 key的探讨1.5 列表过滤1.6 数据监视1.7 表单收集1.8 过滤器1.9 生命周期函数1.10 nextTick1.11 动画与过渡1.12 脚手架配置跨域代理二、组件化开发2.1 演替与定义2.2 使用与注…

多线程进阶(一)锁策略,CAS及Synchronized原理

目录 前言: 常见锁策略 CAS CAS应用场景 标准库中基于CAS实现的原子类介绍 代码实现 ABA问题 Synchronized原理 锁升级 锁消除 锁粗化 小结: 前言: 通过这篇文章可以更加深入理解锁内部的一些实现原理,以及怎样描述一…

Qt 使用 Matlab函数

背景:个人的Qt项目中,需要一个图片分割算法。该算法之前在Matlab上实现过,同时转成C版本有点麻烦,因此尝试通过Qt与Matlab编程相结合的方式,实现该功能。 注意:以下所有功能及配置过程,默认已经…

CSDN竞赛21期题解

总结 (PS:这次竞赛的奖励对我诱惑力感觉没多大,因为高级背包不久前才收到一个,邹老师的两本签名书也早就拿到了,程序员杂志、帆布包也都有了,扑克牌都拿了几副了,所以还是换点其他的书比较好&a…

c语言tips-【c语言内存模型】

0.摘要 C语言是比较接近底层的语言,因此它的很多知识点是和操作系统挂钩的,例如它的内存模型,其实也是操作系统进程的内存模型,本文章就是解释进程,虚拟内存空间,内存模型的相关知识和它们之间的联系 1. 虚…

热交换器及一维平行流换热器分析(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 首先试图对热交换器的设置进行建模,并获得该过程的控制方程。使用相应的控制方程并设置边界条件并获得适当的边界值…

RHCE第五天之NFS服务器详解

文章目录一、NFS服务器简介二、NFS的使用三、客户端使用autofs自动挂载四、实验练习一、NFS服务器简介 NFS(Network File System,网络文件系统): 是FreeBSD支持的文件系统中的一种,它允许网络中的计算机(不…

Qt / Qml 视频硬解码(CUDA)中如何实现无上传硬渲染(一)

【写在前面】 很多时候,我们在对视频的解码和渲染的处理都要经过以下步骤: 软解码,视频帧位于内存。 软渲染,需要拷贝到图像然后渲染;硬渲染则需要上传纹理,然后渲染。硬解码,视频帧位于显存。…

OPengl学习(四)——顶点数组

文章目录1、 问题2、步骤2.1 激活数组2.2 指定数组的数据2.3 解引用和渲染3、例子1、 问题 1、在前面我们实现一个多彩三角形,调用三次glvertext()函数,如果在多边形,如20条边的,那么就要使用22次函数&…

【大数据之路】数据管理篇 《三》存储和成本管理 【搬运小结】

文章目录【大数据之路】数据管理篇 《三》存储和成本管理1.1数据压缩1.2存储治理项优化1.3生命周期管理1.3.1 生命周期管理策略1.3.2 生命周期管理策略1.4数据成本计量【大数据之路】数据管理篇 《三》存储和成本管理 1.1数据压缩 在分布式文件系统中,为了提高数据…

python制作课堂点名系统,从此老师对我关爱有加

前言 大家早好、午好、晚好吖 ❤ ~ 准备工作 首先我们需要准备好点名的姓名文件,使用的时候导入进去就可以开始点名了。 新建一个文本文档,将姓名设置设置好,如下: 使用系统库和第三方库都比较常规 from PyQt5.QtWidgets impo…

Attention机制的具体计算过程

一、介绍Query、Key、Value的来源一个输入,经过embedding位置编码后得到最终的输入X(512维),最终的输入X与矩阵参数WQ(512*64维)相乘,得到Query;与矩阵参数WK(512*64维&a…

Java反射机制

目录 反射问题的引出 Java程序在计算机中部署的三个阶段 反射的主要相关类 反射机制的优缺点 调优 反射常用类—Class 特点 常用方法 获取映射Class类对象的四种方式 类加载的三个阶段 加载阶段 Loading 链接阶段 Linking 验证 Verification 准备 Preparation 解…