OpenCV-1-基础篇

OpenCV-1-基础篇

1.1 基础读写操作

import cv2
def cv2_show(name, img):
    '''
    用于展示图像的函数,注意在图像被展示后,需要按下键盘上的任意按钮,程序才能继续运行。
    name:窗口的名称
    img:图像
    
    '''
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

img = cv2.imread(r'F:\Blog\opencv\lena.png',cv2.IMREAD_UNCHANGED)
print('IMREAD_UNCHANGED:',end='')
print(img.shape)
img = cv2.imread(r'F:\Blog\opencv\lena.png',cv2.IMREAD_GRAYSCALE)
print('IMREAD_GRAYSCALE:',end='')
print(img.shape)
img = cv2.imread(r'F:\Blog\opencv\lena.png',cv2.IMREAD_COLOR)
print('IMREAD_COLOR:',end='') 
print(img.shape)

cv2_show(r'lena',img)
cv2.imwrite(r'F:\Blog\opencv\hello_lena.bmp',img)
print(r'image successfully saved')
IMREAD_UNCHANGED:(506, 505, 4)
IMREAD_GRAYSCALE:(506, 505)
IMREAD_COLOR:(506, 505, 3)
image successfully saved

这里展示了一个基本的读取图片,展示并保存为其他格式的程序。并且对比了三种读图格式对于图像的影响。其中最熟悉的是
cv2.IMREAD_COLOR,用于去读彩色图像,按照BGR顺序,所以输出最后是三个维度。
cv2.IMREAD_GRAYSCALE用于读取黑白图像,只有灰度,所以输出是一个维度。
cv2.IMREAD_UNCHANGED用于读取带有alpha通道的图像,BRG+alpha通道。alpha通道是一个单独的通道,用于表征透明度,数值为1到255之间。并不是所有的图像格式都有这个通道。

涉及到的指令有:cv2.imread,cv2.imshow, cv2.imwrite, cv2.waitKey, cv2.destoryAllWindows

1.2 更改通道顺序

from matplotlib import pyplot as plt
plt.imshow(img)
plt.show()
b,g,r = cv2.split(img)
img_rgb = cv2.merge((r,g,b))
plt.imshow(img_rgb)
plt.show()

在这里插入图片描述
在这里插入图片描述

正如上面提到的,opencv读入的图像顺序是按照brg顺序排列的(真实特立独行o(╥﹏╥)o),因此在大部分支持rgb的图像显示函数里并不适合,就像图片显示的那样,因为通道错误导致图像颜色的混乱。我们需要调换顺序,当然也可以吧图像看做一个数组进行调整。

涉及到的指令有:cv2.split,cv2.merge

1.3 图像的色彩空间转换

#得到所有的cv2.COLOR_ 开头的方法,有需要的可以去寻找自己需要的色彩空间。
#flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
#print( flags )
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print(r'gray:',end='')
print(img_gray.shape)
img_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

gray:(506, 505)

色彩空间的转换也是图像处理的常见操作,最常见的是灰度和彩色之间的相互转换。其次我们可以看到也可以用cv2.cvtColor将bgr的排序转换成rgb的排序。最后就是一些其他的操作比如转换到hsv色彩空间,hsv色彩空间是另一种颜色的表征方式,三个维度分别对应色调(Hue),饱和度(Saturation)和明度(Value),取值范围是色调[0,179], 饱和度[0,255]明度[0,255].

涉及到的指令有:cv2.cvtColor

1.4 图像区域选择和叠加

img_lena = cv2.imread(r'F:\Blog\opencv\lena.png')
img_space = cv2.imread(r'F:\Blog\opencv\space.png')
img_lena = cv2.cvtColor(img_lena,cv2.COLOR_BGR2RGB)
img_space = cv2.cvtColor(img_space,cv2.COLOR_BGR2RGB)
print(img_lena.shape)
print(img_space.shape)
img_lena_sub = img_lena[20:500,20:500,:]
img_space_sub = img_space[20:500,220:700,:]
img_merge = cv2.add(img_lena_sub,img_space_sub)
img_merge_w = cv2.addWeighted(img_lena_sub,0.7,img_space_sub,0.3,0)
plt.imshow(img_space)
plt.show()
plt.imshow(img_merge)
plt.show()
plt.imshow(img_merge_w)
plt.show()
(506, 505, 3)
(512, 930, 3)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们首先复习了cv2.cvtColor的用法,然后让大家看到,图像操作就和矩阵操作一样,可以用切片来获得局部的图像,也可以通过操作更改数组中的值。并且这里我们介绍两个图片叠加的方法,cv2.add就是将两张图数值叠加,超过255的部分会被归为255,而cv2.addWeighted是有权重的叠加,假设输入的两张图片为x和y,则输出的就是ax+bx+c其中abc就是函数中输入的三个数字。

涉及到的指令有:cv2.add,cv2.addWeighted

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值