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

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=False

while ret:
    if ret :
        img_c=cv2.cvtColor(frame,1)#进行通道转换
        cv2.imshow('video',img_c)
           # cv_show('video',frame)
        if cv2.waitKey(100) & 0xFF==27:
            break
    ret,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 img

r,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_dog

plt.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.kler.cn/news/135512.html

相关文章:

  • React整理总结(四)
  • LeetCode 面试题 16.25. LRU 缓存
  • js 对象数组删除某一个特定的对象
  • 达索系统3DEXPERIENCE云端设计新体验
  • CSS-表格属性(1)
  • docker数据卷详细讲解及数据卷常用命令
  • 【计算机视觉】24-Object Detection
  • Django 路由配置(二)
  • ESP32-BLE基础知识
  • 多态语法详解
  • URAT串口通信协议
  • 05_常用API
  • MIB 6.1810操作系统实验:准备工作(Tools Used in 6.1810)
  • Flink(七)【输出算子(Sink)】
  • opencv(5): 滤波器
  • 四旋翼无人机的飞行原理--【其利天下分享】
  • ES6中实现继承
  • 基于变形卷积和注意机制的带钢表面缺陷快速检测网络DCAM-Net(论文阅读笔记)
  • 开源与闭源软件的辩论:对大模型技术发展的影响
  • 基于非洲秃鹫算法优化概率神经网络PNN的分类预测 - 附代码
  • 常见的面试算法题:阶乘、回文、斐波那契数列
  • 【数据结构】树与二叉树(廿一):树和森林的遍历——先根遍历(递归算法PreOrder、非递归算法NPO)
  • Redis内存满了会宕机吗
  • 【Python百宝箱】掌握Python Web开发三剑客:Flask、Django、FastAPI一网打尽
  • 【Django-DRF用法】多年积累md笔记,第(4)篇:Django-DRF反序列化详解
  • Ubuntu 18.04/20.04 LTS 操作系统设置静态DNS
  • Hive常见的面试题(十二道)
  • 【JS】Chapter13-构造函数数据常用函数
  • 【python基础】类详解:如何编写类、__init__()、修改实例属性、类存储到模块并导入、py标准库、编写类的约定
  • STM32硬件调试器不一定准确,proteus不一定准确