Opencv学习(1)——图像的基本操作

opencv学习——图像的基本操作

导入库

import cv2
import matplotlib.pyplot as plt

图像和视频的读取(imread,imshow,VideoCature)


img = cv2.imread('cat.jpg')  # imread函数,读取图片,返回值是图片
# 参数:filename:图像完整文件名字
# flags:默认为1,表示读取彩色图像,为0时返回黑白图像

# # "image"窗口中显示img(上文读取的图片)
# cv2.imshow('image', img)
# cv2.waitKey(0)  # 等待时间,毫秒级,0表示任意键停下
# cv2.destroyAllWindows()
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
print(img.shape)#(垂直像素,水平像素,通道数)
print(img.dtype)#图像数据类型
print(img.size)#获取像素个数
cv2.imwrite("mycat.png",img)#保存图片



#cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备
#如果是视频文件就指定路径。
video = cv2.VideoCapture("test.mp4")#打开视频文件
while(video.read()):
    ret, image = video.read()#读取文件
    #设置窗口
    cv2.namedWindow("video",0)
    cv2.resizeWindow("video",420,300)
    if ret == True:#读取到文件
        gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#将图像转换为灰度
        cv2.imshow("video",gray)#在窗口显示文件
    else:#没有读取到文件
        break
    key = cv2.waitKey(10)#参数可以调整视频播放速度
    if key == 27:#Esc键
        break

video.release()#关闭文件
cv2.destroyAllWindows()#销毁窗口
![在这里插入图片描述](https://img-blog.csdnimg.cn/d1ccd2df3268410684a8a193a5dd9581.png#pic_center)

## 图像的截取

```python
img=cv2.imread('cat.jpg')
cat=img[0:50,0:200]#设置数组切片
cv_show('cat',cat)

在这里插入图片描述

颜色通道提取

# opencv 中 默认BGR格式
b,g,r = cv2.split(img)#切片操作,提取出三个通道
#####
img = cv2.merge((b,g,r))
#将切片的颜色通道组合起来,注意顺序


###只保留一个通道时的样子
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
cv_show("R",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,borderType=cv2.BORDER_REPLICATE)
#反射法,以最边缘像素为轴,对称
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
#外包装法
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
#常量法
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)


###画出图像
plt.subplot(231),plt.imshow(replicate,"gray"),plt.title("replicate")
plt.subplot(232),plt.imshow(reflect,"gray"),plt.title("reflect")
plt.subplot(233),plt.imshow(reflect101,"gray"),plt.title("reflect101")
plt.subplot(234),plt.imshow(wrap,"gray"),plt.title("wrap")
plt.subplot(235),plt.imshow(constant,"gray"),plt.title("constant")

plt.show()

在这里插入图片描述

数值运算

#数值运算
imgcat = img+10
#每一项都加10
#正常加减法,若超过255则为取余运算
imh = cv2.add(imgcat,img)
#add函数,超过255则变为255,未超过则正常加减法

图像融合

#shape值不同无法直接数值运算
#采用resize重新设置大小
imh = cv2.resize(img,(500,414))
res = cv2.addWeighted(img,0.4,imh,0.6,0,dst=None,dtype=-1)#设置融合的图片和权重
res = cv2.resize(img ,(0,0),fx=5,fy=5)

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>