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

目录

  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

如果没有,输入以下命令安装:

python 复制代码
pip install opencv-python

再输入 pip list 查看是否成功安装 opencv-python

三、 图像数据处理

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

Python代码如下:

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代码如下:
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()

结果如下:

  1. 图片翻转

获取本地一张图片,将图片以翻转90度、180度、270度展示出来

Python代码如下:

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代码如下:

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

四、视频数据处理

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

Python代码如下

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)

结果如下:

如需打开本地视频,修改:

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

Python代码如下

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()
相关推荐
AI_NEW_COME10 分钟前
知识库管理系统可扩展性深度测评
人工智能
海棠AI实验室32 分钟前
AI的进阶之路:从机器学习到深度学习的演变(一)
人工智能·深度学习·机器学习
hunteritself34 分钟前
AI Weekly『12月16-22日』:OpenAI公布o3,谷歌发布首个推理模型,GitHub Copilot免费版上线!
人工智能·gpt·chatgpt·github·openai·copilot
南宫生1 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__1 小时前
Web APIs学习 (操作DOM BOM)
学习
IT古董1 小时前
【机器学习】机器学习的基本分类-强化学习-策略梯度(Policy Gradient,PG)
人工智能·机器学习·分类
centurysee1 小时前
【最佳实践】Anthropic:Agentic系统实践案例
人工智能
mahuifa1 小时前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
四口鲸鱼爱吃盐1 小时前
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
人工智能·pytorch·分类
蓝天星空2 小时前
Python调用open ai接口
人工智能·python