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

Posted Aurorand

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opencv学习——图像的基本操作相关的知识,希望对你有一定的参考价值。

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)

以上是关于Opencv学习——图像的基本操作的主要内容,如果未能解决你的问题,请参考以下文章

opencv学习-入门系列汇总

opencv2学习- - - 图像的基本操作

Opencv学习笔记--图像处理的基本操作

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

Python OpenCv学习基础知识四

opencv学习笔记opencv加载图像修改图像显示图像保存图像以及代码举例