【opencv】1基础知识

本文详细介绍了数字图像的基本概念,如RGB模型、像素、PPI、图像压缩以及OpenCV和matplotlib在图像处理中的应用,包括通道顺序转换、图像拼接、numpy切片和图像属性的访问。此外,还讨论了如何创建和处理灰度图像以及基本的图像显示和交互方法。
摘要由CSDN通过智能技术生成

1.模块

 2.应用

3.图像 

注释:鲁棒性,也称健壮性、稳健性或强壮性,是指系统在异常和危险情况下生存的关键特性。

3.1 数字图像的定义:

数字图像作为2D图像,可以使用称为像素的有限数字集进行表示。

3.2 RGB模型:

是一种加法颜色模型,其中原色混合在一起就可以用来表示广泛的颜色范围。

每个原色通常表示一个通道,其取值范围为[0,255]内的整数值。

因此,每个通道共有256个离散的取值,2^8=256,由于有三个不同的通道,使用24位来表示。

3.3 像素:

在RGB颜色模型中,将像素值表示为RGB三元组,(r,g,b)

分辨率为800*1200的图像是一个包含800列和1200行的网格,每个网格就称为一个像素。

因此其中包含96万像素。

3.4 PPI:

像素的大小取决于为该图像设置的每英寸像素数(pixels per inch,PPI)

图像的PPI一般设置在[200,400]之间。

计算PPI的公式如下:

PPI=宽度(像素)/图像宽度(英寸)

PPI=高度(像素)/图像高度(英寸)

例如:一个4*6英寸图像,图像分辨率为800*1200,则PPI是200。

3.5 图像描述:

图像可以描述为二维函数f(x,y)

其中,(x,y)是空间坐标,f(x,y)是在(x,y)处的亮度或灰度或颜色值。

当(x,y)和f(x,y)均为有限离散量时,该图像被称为数字图像。

此时:

\begin{aligned} &x \in [0,h-1] \\ &y \in [0,w-1] \\ &f(x,y)\in [0,L-1] \end{aligned}

h是图像的高度,y是图像的宽度,L=256(对于8位灰度图像)

彩色图像也可以用同样的方式表示,只不过需要三个函数来分别表示红、绿、蓝。

黑白图像可以表示为相同形式,仅需要一个函数来表示图像,且f(x,y)仅能取两个值。通常,0表示黑色,1表示白色。

3.6 图像压缩:

分为有损压缩和无损压缩,对图像进行反压缩,无损压缩得到与原图像完全等价的图像,有损压缩得到的图像与原图像并不等价。在许多有损压缩算法中,压缩级别是可以调整的。

3.7 opencv中的通道顺序:

颜色通道顺序为BGR。matplotlib采用RGB。

如何处理两个库采用的不同颜色格式:

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

# #加载图像
img_OpenCV=cv2.imread('img.jpeg')

#分割图像
b,g,r=cv2.split(img_OpenCV)
#合并通道
img_matplotlib=cv2.merge([r,g,b])
# subplot(matplotlib) 将多个图像放在同一窗口中 subplot(m,n,p)
# m确定行数,n确定列数,p确定在网格中放置的位置
# 显示图像 matplotlib 使用imshow函数

plt.subplot(121)
plt.imshow(img_OpenCV)
plt.subplot(122)
plt.imshow(img_matplotlib)
plt.show()

cv2.imshow('bgr image',img_OpenCV)
cv2.imshow('rgb image',img_matplotlib)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.8 如何拼接图像(numpy): 

#想要构建一个包含着两个图象的拼接图象,将两张图片水平拼接起来。
#使用numpy的concatenate axis=0按行拼接 axis=1按列拼接
#提供了一个用于数组拼接的函数,该函数可以将多个数组沿一个指定的轴方向进行拼接,生成一个新的数组。
img_concatenate=np.concatenate((img_OpenCV,img_matplotlib),axis=1)
cv2.imshow('BGR image and RBG image',img_concatenate)
cv2.waitKey(0)
cv2.destroyAllWindows()

 3.9 numpy的切片:

#cv2.split()比较耗时。如果确实需要划分不同通道,可以考虑使用numpy索引
#numpy切片
# b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
# i缺省时默认为0,即 a[:n] 代表列表中的第一项到第n项,相当于 a[0:n]
# j缺省时默认为len(alist),即a[m:] 代表列表中的第m+1项到最后一项,相当于a[m:5]
# 当i,j都缺省时,a[:]就相当于完整复制a
#b = a[i:j:s]
# 这里的s表示步进,缺省为1.(-1时即翻转读取)
# 所以a[i:j:1]相当于a[i:j]
B=img_OpenCV[:,:,0]
G=img_OpenCV[:,:,1]
R=img_OpenCV[:,:,2]
#一条语句进行转换
img_mpl=img_OpenCV[:,:,:,-1]

3.10 图像的属性:

通过cv2.imread()函数读取图像。

3.10.1 shape:

img_OpenCV=cv2.imread('img.jpeg')
print(img_OpenCV.shape)

行、列、通道的数量(如果图像是彩色的)

3.10.2 size:

img_OpenCV=cv2.imread('img.jpeg')
print(img_OpenCV.size)

图像的大小(图像高度*图像宽度*图像通道数)

3.10.3 图像数据类型:

img_OpenCV=cv2.imread('img.jpeg')
print(img_OpenCV.dtype)

像素值在[0,255]范围内,图像数据类型是uint8 unsigned char

3.11 显示图像:

cv2.imshow()

窗口会自动适应图片的大小。

第一个参数为窗口名,第二个参数为要显示的图像。

3.12 键盘绑定函数waitKey()

它为任何键盘事件等待指定的毫秒数,参数是以毫秒为单位的时间。

当执行到此函数时,程序将暂停执行,当按下任何键后,程序将继续执行。

毫秒数为0时,它将无期限的等待键盘敲击事件。

3.13 访问某个像素值:

获得(x=10,y=20)处的像素值

(b,g,r)=img[10,20]

处理某个区域的像素值

area=img[0:50,0:50]

3.14 关闭并释放所有的窗口:

cv2.destroyAllWindows()

3.15 灰度图像访问和操作:

灰度图像只有一个通道。

3.15.1 加载灰度图像:

gray_img=cv2.imread('img.jpeg',cv2.IMREAD_GRAYSCALE)
cv2.IMREAD_GRAYSCALE

是一个标志位,指定读取图像的方式。

3.15.2 灰度图像的属性:

1)shape

只能得到行和列

2)像素强度

i=gray_img[6,40]

4.总结:

 

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值