本文共 3245 字,大约阅读时间需要 10 分钟。
安装:
pip install numpy opencv-python
读取图片
imread(filename,flag) 读取图片,返回图片对象 img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1 cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0 cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1
eg:
desert_img = cv2.imread(r'Desert.jpg',cv2.IMREAD_GRAYSCALE)
显示照片
imshow(window_name,img):显示图片,窗口自适应图片大小 window_name: 指定窗口的名字 img:显示的图片对象 可以指定多个窗口名称,显示多个图片 waitKey(millseconds) 键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同) millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件 destroyAllWindows(window_name) window_name: 需要关闭的窗口名字,不传入时关闭所有窗口
eg:
def waitkey(im): cv2.imshow('image', desert_img) cv2.waitKey(0)desert_img = cv2.imread(r'Desert.jpg',cv2.IMREAD_GRAYSCALE)p =threading.Thread(target = waitkey, args=[desert_img,])p.start()p.join(2)cv2.destroyAllWindows()
获取图片像素或者是编辑像素
在这里插入代码片
new_img = desert_imgcv2.imshow('d',desert_img)new_img[100:200,100] = numpy.zeros((100,3))cv2.imshow('c', new_img)cv2.waitKey(0)获取图片性质’ 1、shape 获取图片像素,(宽x,长y,3通道(BGR)) 2、size获取图片像素量(xy3) eg:
print(desert_img.shape,desert_img.size,)
(768, 1024, 3) 2359296
截取图片roi = desert_img[600:700,300:400]desert_img[50:150,200:300] = roicv2.imshow('a',desert_img)cv2.waitKey(0)添加边框:
cv2.copyMakeBorder() 参数: img:图像对象 top,bottom,left,right: 上下左右边界宽度,单位为像素值 borderType: cv2.BORDER_CONSTANT, 带颜色的边界,需要传入另外一个颜色值 cv2.BORDER_REFLECT, 边缘元素的镜像反射做为边界 cv2.BORDER_REFLECT_101/cv2.BORDER_DEFAULT cv2.BORDER_REPLICATE, 边缘元素的复制做为边界 CV2.BORDER_WRAP value: borderType为cv2.BORDER_CONSTANT时,传入的边界颜色值,如[0,255,0]
img = cv2.cvtColor(desert_img,cv2.COLOR_BGR2RGB)constant = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_CONSTANT,value=[255,0,0]) #红色reflect = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REFLECT)reflect01 = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REFLECT_101)replicate = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REPLICATE)wrap = cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_WRAP)titles = ["constant","reflect","reflect01","replicate","wrap"]images = [constant,reflect,reflect01,replicate,wrap]for i in range(5): plt.subplot(2,3,i+1),plt.imshow(images[i]),plt.title(titles[i]) plt.xticks([]),plt.yticks([])plt.show()图片相加合成:
cv2.add() 参数: img1:图片对象1 img2:图片对象2 mask:None (掩膜,一般用灰度图做掩膜,img1和img2相加后,和掩膜与运算,从而达到掩盖部分区域的目的) dtype:-1
两张图片的像素必须是一样大小!
eg:desert_img = cv2.imread(r'Desert.jpg',1)lighthouse = cv2.imread(r'Lighthouse.jpg',1)roi_img = numpy.zeros(desert_img.shape[0:2],dtype=numpy.uint8)roi_img[100:280,100:250]=255img_add = cv2.add(desert_img,lighthouse)img_add_mask = cv2.add(desert_img,lighthouse,mask=roi_img)cv2.imshow("img_add",img_add)cv2.imshow("img_add_mask",img_add_mask)cv2.waitKey(0)cv2.destroyAllWindows()打入权重合成;
cv2.addWeighted() 两张图片相加,分别给予不同权重,实现图片融合和透明背景等效果 参数: img1:图片对象1 alpha:img1的权重 img2:图片对象2 beta:img1的权重 gamma:常量值,图像相加后再加上常量值 dtype:返回图像的数据类型,默认为-1,和img1一样
eg:
lighthouse = cv2.imread(r'Lighthouse.jpg',1)penguins = cv2.imread(r'Penguins.jpg',1)blend = cv2.addWeighted(lighthouse,0.9,penguins,0.2,0)cv2.imshow('blend', blend)cv2.waitKey(0)cv2.destroyAllWindows()
转载地址:http://mqben.baihongyu.com/