当前位置: 首页 > news >正文

人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了各种视觉处理函数,并支持多种编程语言,如C++、Python、Java等。OpenCV具有跨平台性,可以在不同的操作系统上运行。它广泛应用于图像处理、视频分析、物体识别、人脸识别、动作识别等领域。

文章目录

  • 一、Opencv的基本操作
    • 1. 图像读取和保存
    • 2. 视频读取和保存
    • 3. 图像通道操作
    • 4. 图像色彩空间
    • 5. 图像阈值操作
    • 6. 图像掩码操作
    • 7. 图像混合操作
    • 8. 图像插值算法

一、Opencv的基本操作

1. 图像读取和保存

读取图像使用cv2.imread(),保存图像使用cv2.imwrite()
我们准备一张图片,例如这张:
在这里插入图片描述

将其命名为image.jpg,然后运行以下代码:

import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 保存图像
cv2.imwrite('new_image.jpg', image)

2. 视频读取和保存

读取视频使用cv2.VideoCapture(),保存视频使用cv2.VideoWriter()

import cv2
# 读取视频
cap = cv2.VideoCapture('video.mp4')
# 定义视频保存的格式
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():ret, frame = cap.read()if ret:# 写入视频帧out.write(frame)# 显示视频帧cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:break
# 释放所有资源
cap.release()
out.release()
cv2.destroyAllWindows()

3. 图像通道操作

在OpenCV中,BGR图像的三个通道可以分别访问和操作。

import cv2
import numpy as np
image = cv2.imread('image.jpg')
# 分离通道
b, g, r = cv2.split(image)
# 合并通道
merged = cv2.merge([b, g, r])
# 显示蓝色通道
cv2.imshow('Blue channel', b)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 图像色彩空间

OpenCV支持多种色彩空间转换,常用的有BGR到灰度图、BGR到HSV等。

import cv2
image = cv2.imread('image.jpg')
# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 转换为HSV色彩空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

5. 图像阈值操作

阈值操作可以将图像转换为二值图像。

import cv2
import numpy as np
image = cv2.imread('image.jpg', 0)
# 应用固定阈值操作
_, thresh1 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('Binary image', thresh1)
cv2.waitKey(0)
cv2.destroyAllWindows()

6. 图像掩码操作

掩码操作允许您选择图像的特定区域进行操作。

import cv2
import numpy as np
image = cv2.imread('image.jpg')
# 创建掩码
mask = np.zeros(image.shape[:2], np.uint8)
mask[100:300, 100:400] = 255
# 应用掩码
masked_image = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow('Masked image', masked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

7. 图像混合操作

图像混合是将两幅图像按照一定的比例合并。

import cv2
import numpy as np
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# 图像混合
blended = cv2.addWeighted(image1, 0.7, image2, 0.3, 0)
cv2.imshow('Blended image', blended)
cv2.waitKey(0)
cv2.destroyAllWindows()

8. 图像插值算法

插值算法在图像缩放时使用,常见的有最近邻插值、双线性插值、双三次插值等。

import cv2
image = cv2.imread('image.jpg')
# 图像缩放,使用双线性插值
resized_image = cv2.resize(image, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)
cv2.imshow('Resized image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码示例展示了如何使用OpenCV进行基本的图像和视频处理任务。这些操作是计算机视觉应用的基础,可以用于更复杂的应用,如物体检测、人脸识别等。
大家请注意:我们要确保替换image.jpgvideo.mp4image1.jpgimage2.jpg为大家的实际文件名。同时,确保安装.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【多模态】40、ConvLLaVA | 使用 ConvNeXt 为 LLaVA 实现更高分辨率的输入
  • C# 下sendmessage和postmessage的区别详解与示例
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • Golang | Leetcode Golang题解之第222题完全二叉树的节点个数
  • 数据库详细复习第三章SQL语句
  • java入门-面向对象基础(this关键字)
  • 大数据面试题之数据库(2)
  • 【数学建模】2005建模A题:长江水质综合评价与预测
  • 光伏电站数据采集方案(基于工业路由器部署)
  • 问题集锦3
  • 鹦鹉智能财税系统:代账公司的智能化升级之路
  • adobe pdf设置默认打开是滚动而不是单页视图
  • Rust简明教程第三章-所有权与借用
  • C++:cv.contourArea()函数解析
  • 前端视角下的Spring-Boot语法学习:打印 hello-world
  • SegmentFault for Android 3.0 发布
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 0x05 Python数据分析,Anaconda八斩刀
  • angular2 简述
  • HTTP中的ETag在移动客户端的应用
  • JavaScript学习总结——原型
  • java取消线程实例
  • node学习系列之简单文件上传
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • React-Native - 收藏集 - 掘金
  • ReactNative开发常用的三方模块
  • XML已死 ?
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 微服务核心架构梳理
  • 小程序开发中的那些坑
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用 Swift 编写面向协议的视图
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #mysql 8.0 踩坑日记
  • #nginx配置案例
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $GOPATH/go.mod exists but should not goland
  • (a /b)*c的值
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (分类)KNN算法- 参数调优
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (区间dp) (经典例题) 石子合并
  • (转)jdk与jre的区别
  • (转)重识new
  • (转载)Linux 多线程条件变量同步
  • .net Application的目录
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net Core 微服务之Consul(三)-KV存储分布式锁