一、图像的读取和显示
opencv中的imread、imwrite、imshow等函数是个老生常谈的问题了,python中只要在文件前边import cv2模块即可~
代码如下所示(可滑动,下同):
1# -- coding: utf-8 -- 2import cv2 3path = 'image.jpg' #path代表图片路径 4image = cv2.imread(path) #读取指定路径图片 5cv2.imshow("original",image) #显示指定路径的图片 6cv2.waitKey(0) #按键检测,当按键才往下执行 7cv2.destroyAllWindows() #按任意键盘后,销毁所有窗口
运行结果如下所示:(在original窗口显示图片)
二、图像类型的检测
图片是由像素组成的,我们可以先检验下读入的图片数据是什么类型数据,长什么样?(其实读入的是数组)
利用type()函数即可查看数据类型
利用sth.shape查看具体信息
1# -- coding: utf-8 -- 2import cv2 3path = 'image1.jpg' #path代表图片路径 4image = cv2.imread(path) #读取指定路径图片 5print(type(image)) #查看数据类型 6print(image.shape) #查看具体的信息
得到的结果为:
1>>> <class 'numpy.ndarray'> 2>>> (500, 749, 3)
表示读取的数据为一三维数组,其尺寸大小为500*749(高*宽)。
三、图像上输出文本
图像上输入文本使用以下函数:
cv2.putText(img,text,org,fontFace,fontScale,color)
1.img 表示cv2读入的图片数据
2.test 表示要写入的文本
3.文字在图片中的坐标。坐标原点位于图片左上角。如org=(100,400),从图片最左边起100,从最最上面往下400。
4.字体。如cv2.FONTHERSHEYTRIPLEX、cv2.FONTHERSHEYPLAIN
5.颜色,三原数组,使用RGB模式编码。如白色为(255,255,255)
具体程序代码如下:
1# -- coding: utf-8 -- 2import cv2 3path = 'image.jpg' #path代表图片路径 4image = cv2.imread(path) #读取指定路径图片 5 6x, y = 200,40 #指定添加文本信息的位置坐标 7cv2.putText(img = image, text = 'What a beautiful girl!', 8 org = (x, y), 9 fontFace = cv2.FONT_HERSHEY_TRIPLEX, 10 fontScale = 1, color = (0,0,255)) 11cv2.imshow('add text on image',image) 12 13cv2.waitKey() 14cv2.destroyAllWindows()
运行结果如下图:
四、图像大小调整
图像尺寸大小调整使用以下函数:(这里忽略结果展示啦~)
resize(src, dsize, fx, fy)
1.src 表示输入图片
2.dsize 表示输出图片的大小,如果为dsize为None(或0),程序会默认执 行disze=(fxsrccols,fysrcrows)
3.fx 表示图片水平方向的缩放比例(倍数)
4.fy 表示图片垂直方向的缩放比例(倍数)
五、图像的旋转和镜像
1.图像旋转
利用的是图像仿射变换及其变化矩阵:
getRotationMatrix2D(center, angle, scale)
1.center 旋转中心
2.angle 旋转角度
3.旋转后图像的缩放比例
代码如下所示:(结果也不做展示了~)
1#获取变化矩阵;第一个参数旋转中心,第二个参数旋转角度,第三个参数缩放比例 2M = cv2.getRotationMatrix2D((cols/2,rows/2), 10, 0.4) 3new_image = cv2.warpAffine(image,M,(rows,cols)) 4cv2.imshow('raw image',image) 5cv2.imshow('new_image',new_image)
2.图像镜像
假设图片是对称的,图片宽度(图片像素列数)为w,选取任意行(这里选第r行)那么图中对称两个点A1、A2,其中A1点坐标(r,w1),注意到数组都是从0开始。A2点必然要满足:
A1[r,w1,:]= A2[r,w-1-w1,:]
所以,实现图像镜像代码为:
1rows = image.shape[0] #图像列数 2cols = image.shape[1] #图像行数 3mirror_col = int(cols/2) #对称于中间一列 4for col in range(mirror_col): 5 image[:, col,:] = image[:, cols-1-col,:] #镜像操作
以lenno图片为例,镜像操作前后结果如下:
六、图像的平铺
以2*3平铺为例,可以看作是图像对应数组的复制过程,其代码如下:
1#新图平铺2行三列,即新图行数变为2倍,列数变为3倍 2new_rows = rows * 2 3new_cols = cols * 3 4new_image = np.zeros(shape=(new_rows, new_cols, 3), dtype=np.uint8) #生成新图的数组 5#复制原图的每一个像素 6row = 0 7col = 0 8for now_row in range(new_rows): 9 for now_col in range(new_cols): 10 new_image[now_row, now_col, :] = image[row, col, :] 11 col+=1 12 #超过原图列数范围,归0,重新开始复制 13 if col>=cols: 14 col=0 15 row+=1 16 #超过原图行数范围,归0,重新开始复制 17 if row>=rows: 18 row=0 19cv2.imshow('new image', new_image) 20cv2.waitKey() 21cv2.destroyAllWindows()
结果如下所示:
七、图像的灰度转换
灰度化较为简单,不做过多叙述,代码如下:
1# -- coding: utf-8 --扫一扫关注我们, 更多咨询早知道! 2import numpy as np 3import cv2 4path = 'image.jpg' #path代表图片路径 5image = cv2.imread(path) #读取指定路径图片 6cvt_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) 7cv2.imshow('cvtColor image', cvt_image) 8cv2.waitKey() 9cv2.destroyAllWindows()
结果如下所示:
好啦~这就是小詹同学关于Python第二讲的全部内容,如果您觉得有价值,欢迎扫码关注和打赏噢~