opencv&python图片基础操作
基本名词和库
通道:R,G,B 彩色图、灰度图、二值图
import cv2 as cv
import matplotlib.pyplot as plt
improt numpy as np
一、图像读取
#读取图像 第一个参数:图片路径 第二个参数cv.IMREAD_COLOR(1)表示按彩色读进来, #cv.IMREAD_GRAYSCALE(0)表示按灰色读进来,cv.IMREAD_UNCHANGED(-1)表示无损读进来,多一个alpha通道 #如果不设置,默认按彩色读进来 img = cv.imread(yahboom.jpg,cv.IMREAD_UNCHANGED) #img 是一个uint8型的数组 BGR
二、图像显示
1、用opencv自带的函数显示
#opencv方式显示图像,打开的是一个单独的窗口,这个窗口有时会在后层,需要将当前窗口最小化后才能看到,不是很方便 #另外其需要配合waitKey使用,因为这是个死等函数,所以后面的不会执行 cv.imshow(show, img)#第一个参数,显示窗口的名称;第二个参数,待显示的图像 cv.waitKey(0) #延时等待,单位毫秒,传入0表示按任意健时间到 cv.destroyWindow(show) #关闭指定窗口 cv.destroyAllWindows() #关闭所有窗口
2、用jupyter Lab控件显示
#bgr8转jpeg格式
import enum
import cv2
def bgr8_to_jpeg(value, quality=75):
return bytes(cv2.imencode(.jpg, value)[1])
#导入窗口控件
import ipywidgets.widgets as widgets
#创建一个窗口控件实例
image_widget = widgets.Image(format=jpg, width=800, height=800)
display(image_widget) #显示一个大小为800*800的jpeg图片显示空窗口
image_widget.value = bgr8_to_jpeg(img)#给窗口赋值图片,因为用CV2读出来是bgr8格式的,所以需要进行转换
3、用matplotlib显示
#需要先进行颜色变换 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #是嵌入在jutyperlab窗口中显示的,有坐标轴 plt.imshow(img) plt.show()
三、图像复制
copy_img=img.copy()
四、图像保存
cv.imwrite(yahboom1.jpg, img) # 1 保存的文件名 2 要保存的对象
五、图像大小改变
img = cv2.imread(yahboom.jpg) # 常用写法1 img_test1 = cv2.resize(img, (宽度, 高度)) # 常用写法2,不指定宽,高,按缩放比例指定 img_test2 = cv2.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv2.INTER_NEAREST)
六、图像色彩变换
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
七、图像像素操作
####常用属性########## img.shape #返回的是height,width和3 type(img) #返回img的数据类型 numpy.ndarray img.size #返回像素点的个数 img.dtype #返回img每个像素数据类型 dtype(uint8) #截取感兴趣的区域 part=img[0:50,0:100] #截取感兴趣的区域,第一个是高度方向,第二个是宽度方向 #颜色通道拆分和合并 b,g,r=cv.split(img) print(b.shape) img=cv.merge((b,g,r)) print(img.shape) #只保留某一个通道,比如红色通道 copy_img=img.copy() copy_img[:,:,0]=0 copy_img[:,:,1]=0 #获取和设置某一个像素点的值 (b,g,r) = img[100,100] img[50,100]=(255,255,255)
