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

python-opencv 培训课程笔记(1)

python-opencv 培训课程笔记(1)

博主参加了一次opencv库的培训课程,把课程所学整理成笔记,供大家学习,第一次课程包括如下内容:

1.读取图像

2.保存图像

3.使用opencv库显示图像

4.读取图像为灰度图像

5.读取视频或者摄像头

6.颜色通道的拆分和合并

7.边界填充

8.图像大小修改操作(resize)

9.数值计算

下面我们就开始内容介绍:
首先需要先导入相关库:

import os
import cv2
import  matplotlib.pyplot as plt
import numpy as np

第二步设置我们的文件读取路径,和文件保存路径:

path=r'D:\learn\photo\cv\cat.jpg'
path_dog=r'D:\learn\photo\cv\dog.jpg'
path2=r'D:\learn\photo\cv\cat_save.jpg'

1.读取图像


# imread(path,way)
#way=0 灰度图。way=1 彩图
img=cv2.imread(path)
img_dog=cv2.imread(path_dog)

imread默认读取彩图,如果后面加一个参数0,那么读取的就是灰度图。

2.保存图像

cv2.imwrite(path2,img_gray)

3.使用opencv库显示图像

def cv_show(name,img):cv2.imshow(name,img)#cv2.waitKey(0),接收0,表示窗口暂停cv2.waitKey(0)#销毁所有窗口cv2.destroyAllWindows()
cv_show('cat',img)

显示如下:
在这里插入图片描述

4.读取图像为灰度图像


img_gray=cv2.imread(path,0)cv_show('gray_cat',img_gray)

在这里插入图片描述

5.读取视频或者摄像头

path_video=r'D:\learn\photo\cv\test.mp4'
vc=cv2.VideoCapture(0)#启用摄像头
vc=cv2.VideoCapture(path_video)#读取视频if vc.isOpened():ret,frame=vc.read()else :ret=Falsewhile ret:if ret :img_c=cv2.cvtColor(frame,1)#进行通道转换cv2.imshow('video',img_c)# cv_show('video',frame)if cv2.waitKey(100) & 0xFF==27:breakret,frame=vc.read()

在这里插入图片描述

6.颜色通道的拆分和合并

def img_rgb_split(img):r,g,b=cv2.split(img)print(r.shape)return r,g,b#颜色通道的合并def img_rgb_merge(r,g,b):img=cv2.merge(r,g,b)return imgr,g,b=img_rgb_split(img)cv_show('r_cat',r)
cv_show('g_cat',g)
cv_show('b_cat',b)

在这里插入图片描述

在这里插入图片描述

7.边界填充


top_size,bottom_size,left_size,right_size=(50,50,50,50)
#复制法,复制最边缘像素 
replicate=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT)
#反射法,在图像中指定像素的两边进行反射复制,
replicate101=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT101)
#反射法,#以最边缘像素为轴
replicate_101=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT_101)
#包装法
wrap=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_WRAP)#常量法
constrant=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_CONSTANT,value=0)plt.subplot(231)
plt.imshow(img)
plt.title('img')plt.subplot(232)
plt.imshow(replicate)
plt.title('REFLECT')
plt.subplot(233)
plt.imshow(replicate101)
plt.title('REFLECT101')
plt.subplot(234)
plt.imshow(replicate_101)
plt.title('REFLECT_101')
plt.subplot(235)
plt.imshow(wrap)
plt.title('wrap')
plt.subplot(236)
plt.imshow(constrant)
plt.title('constrant')
plt.show()

在这里插入图片描述

8.图像大小修改操作(resize)

img_dog=cv2.resize(img_dog,(500, 414))

9.数值计算


img_cat=img+10
plt.subplot(231)
plt.imshow(img)
plt.title('cat')plt.subplot(232)
plt.imshow(img_cat)
plt.title('cat+10')img_cat_dog=img+img_dogplt.subplot(233)
plt.imshow(img_cat_dog)
plt.title('cat+dog')
plt.subplot(234)
plt.imshow(img_dog)
plt.title('dog')img_weight=cv2.addWeighted(img,0.4,img_dog,0.6,0)
plt.subplot(235)
plt.imshow(img_weight)
plt.title('cat+dog_wight')plt.show()

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

http://www.lryc.cn/news/240569.html

相关文章:

  • 【C++初阶】STL详解(七)Stack与Queue的模拟实现
  • 校园报修抢修小程序系统开发 物业小区报修预约上门维修工单系统
  • 【Android】Hilt比Android好在哪里
  • 计算方法 期末总结
  • 【面试】jvm中堆是分配对象存储的唯一选择吗
  • 音视频同步笔记 - 以音频时间为基
  • JavaScript 原始数据类型和对应的对象类型(内置对象)之间的关系
  • 报错For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
  • whisper使用方法
  • 通过easyexcel实现数据导入功能
  • Springboot_文件下载功能(前端后端)
  • Vue框架学习笔记——v-bind数据单向绑定和v-model数据双向绑定
  • 将对象转成URL参数
  • 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
  • 超级武器!深入LoadRunner性能测试流程及极速分析结果!
  • 解决requests库进行爬虫ip请求时遇到的错误的方法
  • 大语言模型领域的重要术语解释
  • 无需公网IP,使用内网穿透实现公网访问本地OpenWRT管理界面
  • 利用 docker 实现JMeter分布式压测
  • Sentinel 分布式系统
  • Cookie、Session、CBV加装饰器的三种方法
  • 【高级渗透篇】网络安全面试
  • 【Flink】Process Function
  • 【源码分析】zeebe actor模型源码解读
  • python3实现类似expect shell的交互式与SFTP的脚本
  • java游戏制作-飞翔的鸟游戏
  • NodeMCU ESP8266构建Web Server网页端控制设备
  • 搭建区块链
  • Python通过selenium调用IE11浏览器报错解决方法
  • Ubuntu 1.84.2Visual Studio Code 下载配置与vscode查看内存Hex Editor插件,简单易懂