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()defcv_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)
本文转载自: https://blog.csdn.net/qq_60130426/article/details/125845851
版权归原作者 Aurorand 所有, 如有侵权,请联系我们删除。
版权归原作者 Aurorand 所有, 如有侵权,请联系我们删除。