OpenCV影像数据处理入门-学习篇

news2024/9/23 1:40:03

目录

  1. 简介
  2. 如何安装
  3. 图像数据处理简单操作
  4. 视频数据处理简单操作

一、简介

在计算机视觉项目的开发中,OpenCV作为最大众的开源库,拥有了丰富的常用图像处理函数库,可用于开发实时的图像处理、计算机视觉以及模式识别程序。采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易干上手,让开发人员更多的精力花在算法的设计上

本文将主要介绍OpenCV开发的一些基础知识、入门上手的方法与步骤等,

OpenCV 常用链接:
OpenCV 官网
OpenCV GitHub 主页
OpenCV 中国 Wiki 论坛

二、如何安装

打开你的PyCharm点开terminal控制台
在这里插入图片描述
先输入 pip list 查看是否安装的有 opencv-python
如果没有,输入以下命令安装:

pip install opencv-python

在这里插入图片描述
再输入 pip list 查看是否成功安装 opencv-python

三、 图像数据处理

  1. 加载图片和展示图片
    获取本地一张图片,将图片以彩色和灰色展示出来

Python代码如下:

import cv2
#定义一个图片地址
img_path = r'./11.jpg'

#以彩色模式读取图片 cv2.IMREAD_COLOR
image_color = cv2.imread(img_path,cv2.IMREAD_COLOR)
#以灰度模式读取图片
image_gray = cv2.imread(img_path,cv2.IMREAD_GRAYSCALE)
#显示图片
cv2.imshow('color image',image_color)
cv2.imshow('gray image',image_gray)

#等待用户按键,然后关闭窗口,不写下面方法,图片会闪一下退出,不会停留
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述

  1. 图片缩放
    获取本地一张图片,将图片以0.75倍比例显示出来
    Python代码如下:
import cv2
#读取图片
image = cv2.imread('./11.jpg')
#检查图片是否正常加载
if image is None:
    print("Error:Could not load image")
    exit()

#获取图片的原始尺寸
#image.shape[:2] 意思是正常图片会有 (高,宽,通道)属性 通道属性不用修改,只取前两个属性
original_height,original_width = image.shape[:2]
#计算新的尺寸
new_width =  int(original_width * 0.75)
new_height = int(original_height * 0.75)
#使用cv2.resize进行图片缩放  image原图片  dsize新尺寸  interpolation压缩时候使用area差值算法
resized_image = cv2.resize(image, (new_width, new_height), interpolation = cv2.INTER_AREA)
#显示原始图片和缩放后的图片
cv2.imshow("Original Image", image)
cv2.imshow("Resized Image", resized_image)
#等待用户按键,然后关闭窗口,不写下面方法,图片会闪一下退出,不会停留
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述
3. 图片翻转
获取本地一张图片,将图片以翻转90度、180度、270度展示出来
Python代码如下:

import cv2
#读取图片
image = cv2.imread("./11.jpg")
#使用cv2.rotate()函数旋转图片
rotate_90 = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) #顺时针旋转90度
rotate_180 = cv2.rotate(image, cv2.ROTATE_180) #顺时针旋转180度
rotate_270 = cv2.rotate(image,cv2.ROTATE_90_COUNTERCLOCKWISE) #顺时针旋转270度

cv2.imshow('original',image)
cv2.imshow('rotate_90',rotate_90)
cv2.imshow('rotate_180',rotate_180)
cv2.imshow('rotate_270',rotate_270)
cv2.waitKey(0)

结果如下:
在这里插入图片描述

  1. 图片保存
    读取一张图片,将图片保存下来

Python代码如下:

import cv2
#获取本地图片
image = cv2.imread("./11.jpg")
#如果图像不为空,则保存图像
if image is not None:
    cv2.imwrite("./output_image.jpg", image)
else:
    print("无法读取图像")

四、视频数据处理

  1. 读取摄像头/视频
    打开电脑摄像头,一帧一帧展示画面

Python代码如下

import cv2

#创建一个 VideoCapture 对象,参数 0 表示使用默认的摄像头,也可以传入一个视频文件的路径
cap = cv2.VideoCapture(0) #打开电脑的摄像头
while True: #读取摄像头里的信息
    #读取一帧 数据在frame中存储 ret是用来判断有没有读取成功
    ret, frame = cap.read()
    #如果读取成功,显示这一帧
    if ret:
        cv2.imshow('frame', frame)

    #按‘q’键退出循环 waitKey加的延时,画面之间至少要间隔1ms
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
#释放资源并关闭窗口
cap.release()
cv2.destroyWindow(frame)

结果如下:
在这里插入图片描述
如需打开本地视频,修改:

cap = cv2.VideoCapture("./piano.mp4") #打开本地视频
  1. 录制电脑摄像视频保存到本地
    保存电脑摄像头的每一帧,输出到本地MP4文件中

Python代码如下

import cv2
#定义视频捕捉对象
cap = cv2.VideoCapture(0)

#检查是否成功打开摄像头
if not cap.isOpened():
    print("Error opening video stream or file")
    exit()

#获取摄像头的帧宽度和帧高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

#定义视频编码器和输出文件
fourcc = cv2.VideoWriter_fourcc(*'mp4v') #保存成MP4文件
out = cv2.VideoWriter("./output.mp4",fourcc,20.0,(frame_width,frame_height)) #帧率为20.0fps

while True:
    ret, frame = cap.read()
    if not ret:
        print("Error reading video stream or file")
        break

    #将当前帧写入输出视频文件
    out.write(frame)
    #显示当前帧
    cv2.imshow('frame',frame)
    # 按‘q’键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

#释放资源并关闭窗口
cap.release()
out.release()
cv2.destroyAllWindows()

在这里插入图片描述

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

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

相关文章

用于辅助视障人士检测人行道障碍物的 TinyML 模型

这篇论文的标题为《A TinyML model for sidewalk obstacle detection: aiding the blind and visually impaired people》,发表在《Multimedia Tools and Applications》上。以下是论文的主要内容概述: 摘要: 论文介绍了在资源受限的物联网…

C语言程序设计 笔记代码梳理 重制版

前言 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute) 2.C语言编写代码到运行 都是先编译,后链接,最后运行。(.c ---> .obj --->.exe)这个过…

热老化的行业应用

热老化应用行业:深度解析与图像呈现 热老化,作为一种重要的材料测试方法,在众多行业中扮演着关键角色。它通过模拟产品在高温环境下的长期使用,提前发现潜在的材料缺陷、性能衰退等问题,从而提高产品的可靠性&#xf…

打造个性化时装购物平台:Spring Boot框架的实践

第1章 绪论 1.1背景及意义 随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对时装购物系统方面的要求也在不断提高,喜欢购物的人数更是不断增加,使得时装购物系统的开发成为必需而且紧迫的…

顶刊精析|METI:整合细胞形态与空间转录组学的肿瘤微环境分析框架·24-09-06

小罗碎碎念 本期精读文献:《METI: Deep profiling of tumor ecosystems by integrating cell morphology and spatial transcriptomics》 今天分享的这篇文献于2023年8月25日发表在Nat Commun,目前IF14.7。 作者类型作者姓名单位名称(中文&am…

【免费分享】25秋招提前批25秋招信息表

秋招,即秋季校园招聘,通常是指每年秋季(大约从9月到11月)企业在各大高校举办的招聘活动。这是许多公司为了吸引优秀应届毕业生而进行的招聘活动,也是许多学生毕业后进入职场的重要途径。以下是秋招的一些关键点&#x…

手机TF卡格式化后数据恢复:方法、挑战与预防措施

在现代生活中,‌手机已经成为我们不可或缺的一部分,‌而TF卡(‌即MicroSD卡)‌作为手机存储的扩展,‌更是承载了我们大量的重要数据。‌然而,‌不慎的格式化操作往往导致数据丢失,‌给用户带来不…

集成电路学习:什么是RAM随机存取存储器

RAM:随机存取存储器 RAM(Random Access Memory,随机存取存储器)是计算机中用于临时存储数据和程序指令的重要存储设备。以下是关于RAM的详细解析: 一、RAM的定义与功能 RAM是一种内部存储器,与CPU直接交换…

(pycharm)安装python库函数Matplotlib步骤

1.在pycharm下面找到terminal,双击输入pip install Matplotlib,进行Matplotlib库函数的安装。 现在,当你运行pip --version或python.exe -m pip --version时,你应该会看到pip的版本已经更新为24.2。

mhtml图片提取 百度图片下载

如果你需要找一些图片,可以先去百度一下,待相关网页加载完成后,点击保存,即可得到一个mhtml文件。这个文件里的图片会用base64进行存储,只需要找到他们并转化就可以。目前在美篇之类的网站上效果还一般,需要…

如何确定 npm 依赖需要的 Node.js 版本?

目录 1,前言2,问题3,解决4,其他 1,前言 有的 npm 依赖会对 Node.js 的版本有要求,主要的原因有几点: 使用了新特性,npm 包使用了新版 Node.js 引入的新 API 或 JavaScript 的新语法…

etcdctl defrag 剔除、添加etcd节点

零、准备工作 find / -name etcdctl cp /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/12/fs/usr/local/bin/etcdctl /usr/local/bin/etcdctlalias ec"etcdctl --endpointshttps://127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --…

常用网络协议理解

1、概念 OSI网络模型由七层组成,从上到下分别是 其中需要用到的且理解的只有应用层、网络层、传输层 2、常见网络协议 协议的作用,就是用于双方规范数据格式,以及规定数据如何在网络中传输 ①应用层协议: HTTP协议&#xff1…

【苍穹外卖】Day 7 地址簿、下单、定时处理

1 地址簿模块 地址簿实体对象: package com.sky.entity;import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** 地址簿*/ Data Builder NoArgsConstructor AllArgsCon…

docker基础知识-docker0网桥

文章目录 示意图Docker 网桥的工作原理Docker 网桥的优势Docker 网桥的局限性自定义网桥网络 Docker 网桥(Docker bridge network)是 Docker 默认的一种网络模式,它允许 Docker 容器之间通过一个虚拟的交换机进行通信。Docker 网桥网络为容器…

Java并发编程实战 03 | Java线程状态

在本文中,我们将深入探讨 Java 线程的六种状态以及它们之间的转换过程。其实线程状态之间的转换就如同生物生命从诞生、成长到最终死亡的过程一样。也是一个完整的生命周期。 首先我们来看看操作系统中线程的生命周期是如何转换的。 操作系统中的线程状态转换 线…

Web安全之GroovyShell讲解:错误与正确示范,安全问题与解决方案

1. 引言 Groovy 是一门基于 Java 虚拟机(JVM)的动态语言,而 GroovyShell 是 Groovy 提供的一个灵活强大的脚本执行工具。通过 GroovyShell,开发者可以在运行时动态执行 Groovy 脚本,它的灵活性非常适合那些需要动态编…

本地使用Docker部署Nexus Maven私有仓库工具结合内网穿透实现远程管理

文章目录 前言1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus 前言 本文主要介绍在Linux中使用Docker来一键部署Nexus Maven私有仓库工具并结合Cpolar内网穿透实现远程访问Nex…

【Python】应用:pyproj地理计算库应用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍pyproj地理计算库应用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

中国传媒业人工智能应用发展图谱2024

易观分析:传媒产业是指以传播各类信息、知识为核心,通过多种媒介形式进行内容生产、发布和分发的综合性产业。技术的进步和应用对于传媒产业发展变革起到了核心驱动力的作用,2022年生成式AI进入应用爆发期,不仅带动了人工智能产业…