Python cv2(Opencv) 图像基本操作

1、安装cv2(OpenCV)

1)安装numpy

pip install numpy

2)安装opencv-python

pip install opencv-python

3)安装opencv-contrib-python

pip install opencv-contrib-python

注意:opencv-pythonopencv-contrib-python的版本需要使用相同的版本。

2、使用cv2(OpenCV)读取图像数据

cv2.IMREAD_COLOR:彩色图像

cv2.IMREAD_GRAYSCALE:灰度图像

使用OpenCV读取图像数据,代码如下,

import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')print(img)#图像的显示,也可以创建多个窗口cv2.imshow('image',img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()print(img.shape)img=cv2.imread('wonhero.jpg',cv2.IMREAD_GRAYSCALE)print(img)print(img.shape)#图像的显示,也可以创建多个窗口cv2.imshow('image',img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(10000) cv2.destroyAllWindows()#保存cv2.imwrite('mypic.png',img)print(type(img)))print(img.size)print(img.dtype)

3、使用cv2(OpenCV)读取视频数据

使用cv2.VideoCapture()可以捕获摄像头,用数字来控制不同的设备,例如,0,1视频文件只需指定好路径即可。

import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np vc = cv2.VideoCapture('video.mp4')# 检查是否打开正确if vc.isOpened():     oepn, frame = vc.read()else:    open = Falsewhile 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(100) & 0xFF == 27:            breakvc.release()cv2.destroyAllWindows()

4、使用cv2(OpenCV)截取部分图像数据

可以方便的对图片进行载取需要的数据,代码如下,

import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')print(img)#图像的显示,也可以创建多个窗口cv2.imshow('image',img) part=img[0:50,0:200]cv2.imshow("part",part) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()

5、使用cv2(OpenCV)提取颜色通道

可以使用cv2.split()对颜色通道进行提取,代码如下,

import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')b,g,r=cv2.split(img)print(r)print(r.shape)img=cv2.merge((b,g,r))print(img.shape)# 只保留Rcur_img = img.copy()cur_img[:,:,0] = 0cur_img[:,:,1] = 0cv2.imshow("R",cur_img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()# 只保留Gcur_img = img.copy()cur_img[:,:,0] = 0cur_img[:,:,2] = 0cv2.imshow("G",cur_img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()# 只保留Bcur_img = img.copy()cur_img[:,:,1] = 0cur_img[:,:,2] = 0cv2.imshow("B",cur_img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()

6、使用cv2(OpenCV)进行边界填充

BORDER_REPLICATE:复制法,也就是复制最边缘像素。

BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba

BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg

BORDER_CONSTANT:常量法,常数值填充。

import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')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 pltplt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')plt.show()

7、图像数值计算

两个图像可以进行数值计算,代码如下,

import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img_1=cv2.imread('img1.jpg')img=img_1 + 10print(img_1[:5,:,0])print(img[:5,:,0])#相当于% 256print((img + img_1)[:5,:,0])#取最大值print(cv2.add(img,img_1)[:5,:,0])

8、图像融合

使用cv2.addWeighted()可以进行两个图像进行融合,代码如下,

import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img_1=cv2.imread('img1.jpg')img_2=cv2.imread('img2.jpg')print(img_1.shape) #img_1尺寸:(400, 500, 3)#查看img_1的尺寸,并设置成相同尺寸才能融合img_2 = cv2.resize(img_2, (500, 400))res = cv2.addWeighted(img_1, 0.4, img_2, 0.6, 0)plt.imshow(res)

免责声明:以上内容(如有图片或视频亦包括在内)有转载其他网站资源,如有侵权请联系删除

咨询热线(9:00 - 18:00)
0755 - 29812418
微信公众号二维码
微信公众号二维码
微信公众号
返回顶部