图像基本操作

在这里插入图片描述

图像的构成
——图像由多个像素点构成

  • 像素点——一个数值
    范围:0-255,表示亮度或者说是灰度,也就是说 0黑的,255白的

RGB图像的颜色通道 (红绿蓝)

  • 对于灰度图没有这三个通道,一个灰度图像它对应的值是一个二维矩阵:(y,x)

  • 颜色通道是针对于彩色图像而言的,一个彩色图像它对应的值是一个三维矩阵:(y,x,3)

    • 其中3对应了BGR通道(opencv默认的)
数据读取——图像
  • cv2.IMREAD_COLOR :彩色图像
  • cv2.IMREAD_GRAYSCALE:灰色图像

  1. 读取图像 cv2.imread(“路径”)

import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
#1.imread读取图像
img=cv2.imread(r"E:\MyStudy-Notes\jupyter\opencvvv\Untitled Folder\image\1.jpg")
#注意:最好在前面加上r
#易出现的问题:\t等被转译

在这里插入图片描述1.1 读取灰度图

#1.1读取灰度图——cv2.IMREAD_GRAYSCALE
img=cv2.imread(r"E:\MyStudy-Notes\jupyter\opencvvv\Untitled Folder\image\1.jpg",cv2.IMREAD_GRAYSCALE)

  1. 图像显示

#2.图像显示
cv2.imshow(‘image’,img)
#等待时间,ms级,0表示任意键终止
cv2.waitKey(0)
cv2.destroyAllWindows()

一般i情况,将图像显示编写成一个方法:

def cv_show(name,img):#将图片显示写成一个方法
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2.1 查看图片的形状
在这里插入图片描述

  1. 图像保存 cv2.imwrite()

#3.图像保存
cv2.imwrite(r"E:\MyStudy-Notes\jupyter\opencvvv\Untitled Folder\image\cat.png",img)

3.1 查看像素点的个数
x * y
在这里插入图片描述


数据读取——视频
  • cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备
  • 如果文件是视频文件,直接指定好路径即可
  1. 打开
vc = cv2.VideoCapture(r"E:\music\MV\灿烈-PUNCH-Stay With Me (《孤单又灿烂的神-鬼怪》韩剧插曲)(标清).mp4")
#检查是否正确打开
if vc.isOpened():
    open,frame = vc.read()#读到每一帧图像
else:
    open = False

vc.read()
返回两个值,open,frame = vc.read()
第一个值:bool类型
第二个值:三维数组,相当于是从视频中取出的一帧图像

  1. 播放
while open:#读取每一张图像,只要够快就不会有卡顿的感觉(嘻嘻嘻)
    ret,frame = vc.read()
    if frame is None:
        break
    if ret == True:
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#转换成灰度图
        cv2.imshow('result',gray)
        if cv2.waitKey(10) & 0xFF == 27:#waitKey(10)相当于播放速度 #0xFF退出键就可以退出了
            break
vc.release()
cv2.destoryAllWindows()

截取部分图像

img = cv2.imread(r"E:\MyStudy-Notes\jupyter\opencvvv\Untitled Folder\image\cat.png")
cat = img[0:250,0:300]#设置切片
cv_show(‘cat’,cat)

颜色通道提取

b,g,r=cv2.split(img) #注意顺序b,g,r
#b g r 值可能不一样,但是形状是一样的

方法

  • 把其他通道设置为0,只保留你想得到的颜色通道

在这里插入图片描述

#只保留R
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
cv_show(‘R’,cur_img)
在这里插入图片描述
#只保留G
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,2] = 0
cv_show(‘G’,cur_img)
在这里插入图片描述
#只保留B
cur_img = img.copy()
cur_img[:,:,1] = 0
cur_img[:,:,2] = 0
cv_show(‘B’,cur_img)
在这里插入图片描述

边界填充
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_REPLICATE)
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_CONSTANT,value=0)
import matplotlib.pyplot as plt
plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.show()
plt.subplot(231),plt.imshow(replicate,'gray'),plt.title('REPLICATE')#复制最边缘像素
plt.show()
plt.subplot(231),plt.imshow(reflect,'gray'),plt.title('REFLECT')#反射法
plt.show()
plt.subplot(231),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.show()
plt.subplot(231),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.show()
plt.subplot(231),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()

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

在这里插入图片描述

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

  • BORDER_REPLICATE:复制法,也就是复制最边缘像素。
  • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制。
  • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称。
  • BORDER_WRAP:外包装法。
  • BORDER_CONSTANT:常量法。常数值填充。

数值计算
  • +常数

img_cat = cv2.imread(r"E:\MyStudy-Notes\jupyter\opencvvv\Untitled Folder\image\cat.png")
img_cat2 = img_cat + 10 #每一个像素点都加10


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

  • image+image

#只能表示0-256 之间的数,不然会 % 256
(img_cat+img_cat)[:5,:,0]

在这里插入图片描述

img_cat = cv2.imread(r"E:\MyStudy-Notes\jupyter\opencvvv\Untitled Folder\image\1.png")
img_fruit = cv2.imread(r"E:\MyStudy-Notes\jupyter\opencvvv\Untitled Folder\image\2.png")
#(img_cat + img_fruit) #报错,形状不同
在这里插入图片描述在这里插入图片描述

补充:变换目标形状
  1. img_cat = cv2.resize(img_cat,(670,510))#变换目标的尺寸

在这里插入图片描述

2.res = cv2.resize(img_cat2,(0,0),fx=2,fy=1)
#通过控制fx,fy的数值,来改变图片的 像素比例
plt.imshow(res)

在这里插入图片描述


  • add

#区别:越界的都用255表示了
cv2.add(img_cat,img_cat)[:5,:,0]

在这里插入图片描述image+image 和 add 的区别:越界的都用255表示了

两张图片叠合
res = cv2.addWeighted(img_cat,0.2,img_fruit,0.2,1)
plt.imshow(res)
  • addWeighted(x1,α,x2,β,b) —> R=α·x1 + β·x2 + b
  • α,β相当于x1和x2的一个权重
  • b相当于在亮度级上进行一个微调

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值