首页 > 其他分享 >opencv图像处理基础

opencv图像处理基础

时间:2022-10-24 11:24:21浏览次数:49  
标签:读取 img cv2 imshow 基础 opencv 图像处理 图像 waitKey

图像的获取

获取方式

  1. 网页上下载(拷贝)—— 自然图像
  2. Numpy 数组生成图片

图像的四个属性

  1. img.shape : 返回元组,其值是图像的高度和宽度(即数组的行和列);彩色图像有第三个参数为 BGR 3通道
  2. type(img) : numpy.ndarray ( numpy 数组)
  3. img.dtype : np.uint8 ( 0-255 为 256 个灰度等级,彩色图像即每个通道范围在 0-255)
  4. img.size : 高度*宽度(像素点);若为彩色图像即 高度*宽度*3

图像基础操作

Opencv图像存储方式为 Numpy 数组,其数据类型为 numpy.uint8 ( 8个字节 )

读,写,显示图像

读取图像

Opencv 中的 imread( ) 函数用于将文件中的图像读入内存,该函数支持各种静态图像文件格式(BMP , PNG , JPEG , JPG , TIFF——用于保存分辨率较大的图)

基本格式:
img = cv2.imread('filename',flags)

函数参数说明:

filename:读取图像的文件路径和文件名 ( 路径中使用双斜杠 )
flags:读取图片的方式,可选项如下:

cv2.IMREAD_COLOR(1):始终将图像转换为 3 通道BGR彩色图像,默认方式(Opencv 默认的图像格式为BGR,即 3 通道图像数组的 3 个维度,依次为 B ( 蓝色 ),G ( 绿色 ),R ( 红色 ) 通道的像素)

cv2.IMREAD_GRAYSCALE(0):始终将图像转换为单通道灰度图像

cv2.IMREAD_UNCHANGED(-1):按原样返回加载的图像(使用Alpha通道)

cv2.IMREAD_ANYDEPTH(2):在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位

cv2.IMREAD_ANYCOLOR(4):以任何可能的颜色格式读取图像
返回值 retval:读取的 OpenCV 图像,nparray 多维数组

写图像(保存图像)

Opencv 中的 imwrite ( ) 函数用于将 NumPy 数组中保存的图像写入文件

基本格式:
cv2.imwrite('filename',img)

函数参数说明:

filename:保存图像的路径,保存的图像名字及类型(后缀名可与读取的图像文件不一致——对NumPy 数组压缩的方式不同)
img:读取的图像文件,也可以是读取的视频中的一帧 frame(读取到的 NumPy 数组)

显示图像

Opencv 中的 imshow ( ) 函数用于在窗口显示图像

基本格式:
cv2.imwshow('filename',img)

函数参数说明:

filename:显示窗口名
img:读取的图像文件,也可以是读取的视频中的一帧 frame(读取到的 NumPy 数组)

代码展示:

import cv2
import numpy as np

img1 = cv2.imread('D:\\opencv\\image\\08_wlq.png',1) #以彩色形式读取

cv2.imshow('duck_color',img1) #显示图像

cv2.waitKey(0) #等待按键跳转到下一语句(该句是按任意按键继续)
cv2.imwrite('save_duck_1.png',img1) #默认保存工程文件夹路径

img2 = cv2.imread('D:\\opencv\\image\\08_wlq.png',0) #以灰度形式读取
cv2.imshow('duck_gray',img2)
cv2.waitKey(0)
cv2.imwrite('save_duck_2.png',img2)

读写显示视频(示例代码)

import cv2

vc = cv2.VideoCapture('C:\\Users\\Administrator\\Desktop\\Minions_banana.mp4')    #创建vidoe对象

buer,frame = vc.read()  #buer是一个布尔值,读取视频成功为 1,frame为读入的一帧

while buer:
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)  #灰度读取
    cv2.imshow('stn',gray)
    buer,frame = vc.read()
    key = cv2.waitKey(25)   #延迟时间
    if key == 27:  #按esc键结束
        break
vc.release()  #关闭视频
cv2.destroyAllWindows()

色彩空间的改变

Opencv 中的 cv2.cvtColor ( ) 函数用于转换色彩空间类型 NumPy 数组中保存的图像写入文件

基本格式:
dst = cv2.cvtColor(src,code[,dstcn])

函数参数说明:

dst:表示转换后的图像
src:表示转换前的图像
code:表示色彩空间类型转换码
dstCn:表示目标图像的通道数

常用的空间类型转换码:
cv2.COLOR_BGR2RGB:将BGR色彩空间转换为RGB色彩空间
cv2.COLOR_BGR2GRAY:将BGR色彩空间转换为GRAY色彩空间(灰度)

示例代码

img = cv2.imread('C:\\Users\\Administrator\\Desktop\\08_wlq.png',1)

cv2.imshow('img_BGR',img)
cv2.waitKey(0) 

img2 = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow('img_RGB',img2)
cv2.waitKey(0)

img3 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('img_GRAY',img3)
cv2.waitKey(0)

图像通道操作

图像通道的拆分

opencv函数拆分通道:split函数

b,g,r = cv2.split(img)
cv2.imshow('img_B',b)
cv2.imshow('img_G',g)
cv2.imshow('img_R',r)

cv2.waitKey(0)

numpy数组拆分通道

blue = img[:,:,0]
green = img[:,:,1]
red = img[:,:,2]

cv2.imshow('img_B',blue)
cv2.imshow('img_G',green)
cv2.imshow('img_R',red)

cv2.waitKey(0)

图像通道的合并

opencv函数合并通道:merge

img_2 = cv2.merge([b,g,r])

cv2.imshow('img_merge_2',img_2)
cv2.waitKey(0)

numpy数组合并通道

#先创建一个numpy数组,再对其赋值
img_1 = np.zeros((img.shape[0],img.shape[1],3),dtype = np.uint8)
img_1[:,:,0] = b
img_1[:,:,1] = g
img_1[:,:,2] = r

cv2.imshow('img_merge',img_1)
cv2.waitKey(0)

图像算术运算

标签:读取,img,cv2,imshow,基础,opencv,图像处理,图像,waitKey
From: https://www.cnblogs.com/ttduck/p/16820854.html

相关文章

  • linux操作基础
    Linux命令1.重启系统或者重启网卡,输入命令"reboot"或"servicenetworkrestart"2.安装gcc           yum-yinstallgcc3.安装gcc-c++ ......
  • 【Python基础学习】第十二节 文件操作
    Python基础学习之文件操作1.open()函数想要对文件进行操作,必须先建立文件对象,然后再对文件对象进行操作;想要建立文件对象,需要使用open()函数;open()函数使用方法如下:f......
  • 【Python基础学习】第十三节 异常操作总结
    Python基础学习之异常操作总结在Python运行遇到异常时,程序会终止;而在我们编程过程中,错误是不可避免的,这时我们需要捕捉到异常,还需要程序继续运行;这时我们就需要根据异常Tra......
  • 面试HTML CSS基础
    01.如何将下面的代码修改的更有语义化?<div><div>这是一个标题</div><div>这是一段文字</div><div><div>列表1</div><div>列表2</div></div></div......
  • 2022-2023-1 20221317《计算机基础与程序设计》第九周学习总结
    作业信息这个作业属于哪个课程:首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园(cnblogs.com)这个作业的要求在:2022-2023-1《计算......
  • HTML躬行记(2)——WebRTC基础实践
    WebRTC(WebReal-TimeCommunications)是一项实时通讯技术,在2011年由Google提出,经过10年的发展,W3C于2021年正式发布WebRTC1.0标准。WebRTC标......
  • 域环境的基础和搭建
    目录内网渗透的流程概述什么是工作域和组搭建域环境1、设置服务器2、更改域控服务器的主机名3、安装域控制器和DNS服务4、域内主机加入域活动目录AD的作用使用CobaltStrik......
  • ansible配置基础
    配置文件详解[root@ansible~]#vim/etc/ansible/ansible.cfg[defaults]默认配置#somebasicdefaultvalues...#inventory=/etc/ansible/hosts#主机列表配置文......
  • 2022-2023-1 20221316《计算机基础与程序设计》第八周学习总结
    作业信息<班级的链接>首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园<作业要求的链接>:https://www.cnblogs.com/rocedu/p/9577842.h......
  • 2022-2023-1 20221312 《计算机基础与程序设计》第八周学习总结
    班级链接:首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园(cnblogs.com)作业要求:2022-2023-1《计算机基础与程序设计》教学进程-娄......