概述
一、基本处理
1、导入图像
import cv2
img = cv2.imread('split.jpg',1)
第一个参数是图片路径,第二个是读取的方式。
读取方式:
(1)CV_LOAD_IMAGE_UNCHANGED (<0),以原始图像读取(包括alpha通道)
(2)CV_LOAD_IMAGE_GRAYSCALE ( 0),以灰度图像读取
(3)CV_LOAD_IMAGE_COLOR (>0),以RGB格式读取
代码中的1对应第三种读取方式,写为imread('split.jpg',CV_LOAD_IMAGE_COLOR)也可以。
2、显示和保存图像
import cv2
img = cv2.imread('split.jpg',1)
cv2.imshow('photo',img)
k = cv2.waitKey(0)
if k == 27: # 输入ESC键退出
cv2.destroyAllWindows()
elif k == ord('s'): # 输入S键保存图片并退出
cv2.imwrite('split_.jpg',img)
cv2.destroyAllWindows()
imshow()函数显示图片。
waitKey()函数的参数为0时,表示等待键盘输入,参数为其他数字时,表示等待几秒。代码中使用k接受键盘输入,设定输入ESC时调用destroyAllWindows(),关闭图像显示窗口。
imwrite()函数保存图片到指定路径。
3、通道转化
import cv2
img = cv2.imread("girl_gray.jpg",cv2.IMREAD_UNCHANGED)
img_color = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
cv2.imshow("color_image",img_color)
cv2.imshow("image", img)
cv2.cvtColor()函数进行图片的通道转化,转换方式取决于第二个参数,转换方式有太多种了,不一一列举,需要什么现查即可。
举例: COLOR_BGR2RGB (BGR通道转化为RGB通道)
COLOR_RGB2BGR (RGB通道转化为BGR通道)
COLOR_GRAY2BGR (灰度图转化为BGR通道)
4、图像通道分离
将图像原有的RGB三个通道分为R、G、B显示
import cv2
src=cv2.imread('split.jpg')
cv2.imshow('before',src)
#调用通道分离
b,g,r=cv2.split(src)
#三通道分别显示
cv2.imshow('blue',b)
cv2.imshow('green',g)
cv2.imshow('red',r)
此时显示的结果为三张灰度图,每个通道单独显示时都是一个灰度图,如果要显示正常的红绿蓝颜色,需要将每个单通道图片恢复为三通道图片再显示,如下所示
zeros = np.zeros(image.shape[:2],dtype="uint8")#创建与image相同大小的零矩阵
cv2.imshow("BLUE",cv2.merge([b,zeros,zeros]))#显示 (B,0,0)图像
cv2.imshow("GREEN",cv2.merge([zeros,g,zeros]))#显示(0,G,0)图像
cv2.imshow("RED",cv2.merge([zeros,zeros,r]))#显示(0,0,R)图像
图像通道合并函数merge(),用法如上所示
二、图像平移旋转放缩
1、图像平移
import cv2
import numpy as np
img = cv2.imread('img2.png')
# 构造移动矩阵H
# 在x轴方向移动多少距离,在y轴方向移动多少距离
H = np.float32([[1, 0, 50], [0, 1, 25]])
rows, cols = img.shape[:2]
print(img.shape)
print(rows, cols)
# 注意这里rows和cols需要反置,即先列后行
res = cv2.warpAffine(img, H, (2*cols, 2*rows))
cv2.imshow('origin_picture', img)
cv2.imshow('new_picture', res)
cv2.warpAffine(img, H, (2*cols, 2*rows))函数实现图像变换,img表示该图像,H表示变换矩阵,第三个参数表示新生成的图像size
H矩阵的设定决定了图像的变换方式。上述代码段中设置的是在x轴方向平移50,y方向平移25,根据实际需求再设定即可。
2、图像缩放
# 方法一:通过设置缩放比例,来对图像进行放大或缩小
res1 = cv2.resize(img, None, fx=2, fy=2,
interpolation=cv2.INTER_CUBIC)
height, width = img.shape[:2]
# 方法二:直接设置图像的大小,不需要缩放因子
res2 = cv2.resize(img, (int(0.8*width), int(0.8*height)),interpolation=cv2.INTER_LANCZOS4)
cv2.imshow('origin_picture', img)
cv2.imshow('res2', res2)
resize()函数实现放缩,img表示图片,None表示不设置放缩后的图片尺寸(当然也可以设置,就不需要fx和fy参数了),fx和fy即为放缩的倍数,最后一个参数为插值的方法。
插值方法有:
cv2.INTER_NEAREST(最近邻插值)
cv2.INTER_AREA (区域插值)
cv2.INTER_CUBIC(三次样条插值)
cv2.INTER_LANCZOS4(Lanczos插值)
3、图像旋转
与1的图像平移类似,都借助warpAffine方法,区别是构造的H矩阵不同
img=cv2.imread('img2.png',1)
rows,cols=img.shape[:2]
#参数1:旋转中心,参数2:旋转角度,参数3:缩放因子
#参数3正为逆时针,负值为正时针
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,1,)
print(M)
#第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(cols,rows))
旋转矩阵M的构造方式是调用getRotationMatrix2D函数,提供旋转中心,旋转角度,缩放因子,旋转方向,求得旋转矩阵,代入warpAffine方法中即可。
总结:
我整理了一份关于pytorch、python基础,图像处理opencv自然语言处理、机器学习、数学基础等资源库,想学习人工智能或者转行到高薪资行业的,大学生都非常实用,无任何套路免费提供,,加我Q群【856833272 】也可以领取的内部资源,人工智能题库,大厂面试题 学习大纲 自学课程大纲还有200G人工智能资料大礼包免费送哦~扫码加V免费领取资料.
最后
以上就是外向书包为你收集整理的Opencv图像处理入门的全部内容,希望文章能够帮你解决Opencv图像处理入门所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复