Opencv图像处理入门

一、基本处理
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免费领取资料.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值