《OpenCV计算机视觉》--介绍及基础操作

news/2024/12/24 9:12:50 标签: 计算机视觉, opencv, 人工智能

文章目录

  • 《OpenCV计算机视觉》--介绍及基础操作
    • 一.OpenCV介绍
    • 二.下载OpenCV
    • 三.基础操作
      • 1.调用OpenCV
      • 2.读取图片信息
      • 3.读取图片的灰度图
      • 4.视频文件读取
      • 5.对图片进行切片
      • 6.提取RGB颜色通道
      • 7.合并颜色通道
      • 8.图片修改
        • 图片打码
        • 图片组合
      • 9.cv2.resize
      • 10.图形运算
        • 图像加法运算
        • cv2.add()运算
        • 图像加权运算

《OpenCV计算机视觉》–介绍及基础操作

一.OpenCV介绍

OpenCV(open source computer vision library)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。
计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。

二.下载OpenCV

注意:下载虽然使用opencv-python,但是在python中调用使用import cv2。

三.基础操作

1.调用OpenCV

import cv2

2.读取图片信息

a = cv2.imread('demo1.png') #读取图片
print(a)
cv2.imshow('tu',a) # 展示图片
b = cv2.waitKey(10000) # 展示时间,当为0时为一直保留
print(b)
cv2.destroyAllWindows() #关闭所有窗口,并释放内存
print("图片形状(shape):",a.shape)
print("图片数据类型(dtype)",a.dtype)
print("图片大小(size):",a.size)

3.读取图片的灰度图

b = cv2.imread('demo1.png',cv2.IMREAD_GRAYSCALE) # 使用opencv的IMREAD_GRAYSCALE方法,使彩色图片转换成灰度图
cv2.imshow('xx',b)
cv2.waitKey(0)
print(b.shape)
print(b.dtype)
print(b.size)
cv2.imwrite('demo1_GRAY.png',b) # 将图片保存到根目录
cv2.destroyAllWindows()

4.视频文件读取

video_capture = cv2.VideoCapture(xxxx.mp4) # 当cv2.VideoCapture()中是0时调用摄像头
# 检查视频是否成功打开
if not video_capture.isOpened():
    print('无法打开视频文件')
    exit()
# 循环读取视频帧
while True:
    ret, frame = video_capture.read()
    if not ret:
        break
     # 将图片从一种颜色转换成另一种颜色空间
    frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    # 显示当前帧
    cv2.imshow('Video',frame)
    # 检查用户是否按下‘esc’键,如果是则退出循环
    if cv2.waitKey(1) == 27:
        break
# 释放资源
video_capture.release()
cv2.destroyAllWindows()

5.对图片进行切片

a = cv2.imread(r'./demo1.png')
b = a[100:300,100:300] # 进行切片
cv2.imshow('yuantu',a)
cv2.imshow('qiepian',b)
cv2.waitKey(0)
cv2.destroyAllWindows()

6.提取RGB颜色通道

import cv2
a = cv2.imread(r'./demo1.png')
# 提取颜色通道
a1=a[:,:,0] # B
a2=a[:,:,1] # G
a3=a[:,:,2] # R

# 或者使用cv2.split()来分离颜色通道
b , g, r = cv2.split(a)

cv2.imshow('result',a2)

cv2.waitKey(0)
cv2.destroyAllWindows()

图片提取出来可以看到图片无论是a1,a2,a3都是灰色图片,因为提取后的图片都是一维的都是灰度图。

故此可以使用一下方法提取颜色:

a = cv2.imread(r'./demo1.png')

a_new = a.copy()
a_new[:,:,0]=0
a_new[:,:,1]=0

cv2.imshow('result',a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

7.合并颜色通道

# 读取图像
a = cv2.imread(r'./demo1.png')
# 提取颜色通道
a1 = a[:, :, 0]
a2 = a[:, :, 1]
a3 = a[:, :, 2]
# 或使用cv2.split()来分离颜色通道
b, g, r = cv2.split(a)
# 使用cv2.merge()函数将三个通道合并成一个图像
img = cv2.merge((b, g, r))
# img = cv2.merge((a1,a2,a3))或使用这串代码
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

8.图片修改

图片打码
import numpy as np
a = cv2.imread(r'demo1.png')
a[100:200,200:300]= np.random.randint(0,256,(100,100,3)) # 将a中的宽100到200和高200到300变成马赛克,注意后面的(100,100,3)要和前面所截取的大小相同。
cv2.imshow('masaike',a)
cv2.waitKey(0)
cv2.destroyAllWindows()
图片组合
a= cv2.imread('demo1.png')
b = cv2.imread('demo2.png')
b[200:500,100:400]= a[200:500,200:500]
cv2.imshow('b',b)
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.destroyAllWindows()

9.cv2.resize

cv2.resize()方法是用来改变图片的大小的

a = cv2.imread('demo1.png')
# a_new = cv2.resize(a,(300,500)) # 宽、高 或者下面这种方法
a_new = cv2.resize(a,dsize=None,fx=0.5,fy=0.5)
cv2.imshow('a',a)
cv2.imshow('a_new',a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

10.图形运算

图像加法运算
a = cv2.imread('demo1.png')
b = cv2.imread('demo2.png')
c = a+10
cv2.imshow('yuan',a)
cv2.imshow('a+10',c)
cv2.waitKey(10000)

c=a[100:300,50:250]+b[100:300,50:250]
cv2.imshow('a+b',c)
cv2.waitKey(10000)
cv2.add()运算

cv2.add()是 OpenCV 库中的一个函数,用于对两个数组(通常是图像或矩阵)进行加法操作。

a = cv2.imread('demo1.png')
b = cv2.imread('demo2.png')
b = cv2.resize(b,(400,400))
a = cv2.resize(a,(400,400))
c = cv2.add(a,b)
cv2.imshow('a add b',c)
cv2.waitKey(10000)
图像加权运算
a = cv2.imread('demo1.png')
b = cv2.imread('demo2.png')
b = cv2.resize(b, (400,400))
a = cv2.resize(a, (400,400))
c = cv2.addWeighted(a, 0.5,b, 0.3,0) # 分别将图片的权值占比改变
cv2.imshow('addWeighted',c)
cv2.waitKey(10000)
cv2.destroyAllWindows()

http://www.niftyadmin.cn/n/5797616.html

相关文章

2、光同步数字传送网的特点

同步复用 光同步数字传送网(SDH)采用同步复用方式。它将多个低速信号复用成高速信号,与准同步数字体系(PDH)的异步复用不同。在 SDH 中,各支路信号与复用后的高速信号是同步的,这种同步复用的方…

【Pycharm相关设置】新版Pycharm关闭主菜单,取消自动隐藏工具栏

【Pycharm相关设置】新版Pycharm关闭主菜单,取消自动隐藏工具栏 Pycharm主菜单关闭主菜单 Pycharm主菜单 新版pycharm多了主菜单,会自动隐藏工具栏,强迫症犯了 找了很久关闭的地方 关闭主菜单 设置–>外观–》取消勾选“合并主菜单和窗口…

图像处理基础 | 格式转换.rgb转.jpg 灰度图 python

一般情况下 .rgb 格式的存储顺序: 颜色顺序: 一般情况下,.rgb 文件存储的是原始的 RGB 数据(而不是 BGR 数据)。即每个像素是由 R(红色)、G(绿色)、B(蓝色&…

OCR(二) TesseractOCR 语言包训练

目录 1. 语言包简介 2. 环境部署 2.1 安装tessract 2.2 安装java JDK 2.3 下载jTessBoxEditor 3. 训练(LSTM模式-推荐) 3.1 示例 3.2 制作tiff图片 3.3 生成box文件 3.4 调整训练文件 3.5 生成 lstmf 文件 3.6 提取LSTM文件 3.7 创建txt文件 3.8 合并 3.9 验证…

Spring Boot 整合 RabbitMQ:手动 ACK 与 QoS 配置详解

在分布式系统中,消息队列(Message Queue)是实现异步通信的重要组件。RabbitMQ 作为一个功能强大的消息代理,提供了多种消息传递模式和丰富的配置选项。在生产环境中,为了确保消息的可靠传递,我们通常需要配…

【工作流】工作顺序

背景 当时的情况是:没有产品经理,后端直接和需求方对接;前端只能短时间投入大部分时间要忙别的;只有3个角色:需求方,后端,前端; 当时直接执行的 直接使用会议了解需求&#xff0c…

Go C编程 第6课 无人机 --- 计算旋转角

旋转的秘密---认识角度 rt、lt命令学习 goc电子课程 一、编程步骤 第一步 第二步 第三步 第四步 二、画“四轴无人机” (一)、画第一根机轴 (二)、画第二根机轴 (三)、画完整的无人机 三、画“多轴无人…

单片机上电后程序不运行怎么排查问题?

1.电源检查。使用电压表测量单片机的电源电压是否正常,确保电压在规定的范围内,如常见的5V。 2.复位检查。检查复位引脚的电压是否正常,在单片机接通电源时,复位引脚通常会有一个高电平,按下复位按钮时,复位…