OpenCV-Python入坑笔记(二) 图片处理

图像的读写和显示操作

图像处理最基本的三个函数
imread(“PATH”,mode)
读取指定路径下的图像,我这里是是在Windows下使用的,所以路径用的是“\\”,还可以定义加载的mode,不写默认是RGB模式。
imshow(windows_name,image)
第一个参数是要显示的窗口名称,第二个参数是要显示的图片即读取出来的的图片。
imwrite(“PATH”,image)
第一个参数是图像保存的路径,第二个参数是读取出来的照片,也可以是处理过的照片,后面会继续介绍。
下面先来看一下读取和在窗口显示的代码:

import cv2
#读取照片,支持常见格式,jpg,png,bmp,git
img = cv2.imread("D:\\lb\\Desktop\\opencv\\image_source\\beiying.jpg")
#窗口命名为image
cv2.namedWindow("image")
#展示窗口,第一个参数为窗口名称,第二个参数为读取的照片
cv2.imshow("image", img)
#等待按键输入,如果不加这一条图片会一闪而过
cv2.waitKey (0)
#销毁窗口,销毁特定窗口 cv2.destroyAllWindows("WindowsName")
cv2.destroyAllWindows()

运行以上代码,你会发现会弹出一个窗口,如下:
买橘子你别动
下面我们来改写一下上面的代码:

k = cv2.waitKey (0)
#销毁窗口,销毁特定窗口 cv2.destroyAllWindows("WindowsName")
#cv2.destroyAllWindows()
#判断按键的值
if k == ord('q'):#按下小写q就退出
cv2.destroyAllWindows()
elif k == ord('s'):#按下小写s就保存
#保存路径
cv2.imwrite("D:\\lb\\Desktop\\opencv\\image_modify\\beiying_save.jpg",img)
print("保存成功,请到文件下查看!\r\n")#保存成功提示
cv2.destroyAllWindows()

运行程序,然后按下s键,结果如下:
显示保存图片

获取图像属性

img = cv2.imread("D:\\lb\\Desktop\\opencv\\image_source\\beiying.jpg")
#打印图像属性
print(img.shape)
print(img.size)

输出文本

#输出文字在照片上
# 照片 “文字” 左上角位置 字体 大小 颜色 线宽
cv2.putText(img, 'beiying', ( 50, 50), 0, 1, (0,0,255), 1)
cv2.putText(img, 'beiying', (150,150), 0, 2, (0,255,0), 2)
cv2.putText(img, 'beiying', (250,250), 0, 3, (255,0,0), 3)

缩放图片

#缩放图片,可设置放大和缩小倍数
#获取当前图片的宽和高
height,width = img.shape[:2]
#宽和高都设置为当前的两倍,赋值给res
res_big = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
res_sml = cv2.resize(img,(width//2, height//2), interpolation = cv2.INTER_CUBIC)
#展示放大后的图片
cv2.imshow("image_big", res_big)
#展示缩小后的图片
cv2.imshow("image_sml",res_sml)

图像平移

#图像平移
M = np.float32([[1,0,100],[0,1,50]])
res_move = cv2.warpAffine(img,M,(height,width))
#显示平移后的图片
cv2.imshow("image_move",res_move)

图像旋转

#图像旋转
M = cv2.getRotationMatrix2D((height/2,width/2),90,1)
res_rotate = cv2.warpAffine(img,M,(height,width))
#展示旋转后的图片
cv2.imshow("image_rotate",res_rotate)

仿射变换

#仿射变换
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
res_Transform = cv2.warpAffine(img,M,(height,width))
#展示变换后的图片
cv2.imshow("image_Transform",res_Transform)

图像颜色转换

#图像颜色变换 COLOR_BGR2GRAY是将彩色转换为灰度,还有别的,具体请查看官方文档
#由于我这里使用的本身就是黑色图片,具体效果可查看文字颜色
res_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#展示颜色变换后的图片,
cv2.imshow("image_gray",res_gray)

通道拆分与合并

#通道拆分,图片通常是由R G B 三个通道的
res_b,res_g,res_r = cv2.split(img)
#通道合并
res_b_g_r = cv2.merge((res_b,res_g,res_r))
#展示每个通道下的图片
cv2.imshow("image_b",res_b)
cv2.imshow("image_g",res_g)
cv2.imshow("image_r",res_r)
#展示通道合并后的图片
cv2.imshow("image_b_g_r",res_b_g_r)

图像添加边距

#图片添加边距
GREEN = [0,255,0]
res_replicate = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REPLICATE)
res_reflect = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REFLECT)
res_reflect_101 = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REFLECT_101)
res_wrap = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_WRAP)
res_constant= cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_CONSTANT,value=GREEN)
#展示各种边距的不同样式
cv2.imshow("image_replicate",res_replicate)
cv2.imshow("image_reflect",res_reflect)
cv2.imshow("image_reflect_101",res_reflect_101)
cv2.imshow("image_wrap",res_wrap)
cv2.imshow("image_constant",res_constant)

效果展示:
每个窗口代表不同的操作,具体操作名称与代码中的窗口名称对应:
图片缩放
所有的
all-style

图像的基本操作大概就这些,不过这才是一小步,路还长着呢,先慢慢挖坑吧~哈哈

完整代码请关注我的公众号: 唯有爱与科技不可辜负

回复:入门笔记2 即可获得!

也可以扫码关注哦~虽然还没什么文章,不过让我们共同进步吧!

请我喝一罐冰阔乐 (^o^)/