opencv入门基础(三)图像变换

opencv入门基础(三)图像变换

一.cv中按照RGB颜色通道显示

cv中读取一张图片是按照BGR的三通道信息显示图片的,这与我们正常看到的图片不同,可以先转化为RGB顺序。

import cv2
import matplotlib.pyplot as plt
img = cv2.imread("BIT.jpg")
b,g,r = cv2.split(img)
img_new = cv2.merge([r,g,b])
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(img_new)
plt.show()

结果为(左为cv2.imread()打开的图,右为转换好的图):
在这里插入图片描述

二.图片的放大、缩小

所用函数:cv2.resize(读取的图片,尺寸,变换方法)

import cv2
import matplotlib.pyplot as plt
img = cv2.imread("BIT.jpg")
height,width,channel = img.shape
print(height,width,channel)     # 1080 1620 3
# 图片的放大
resized_img = cv2.resize(img,(width*2,height*2),interpolation=cv2.INTER_LINEAR)
plt.subplot(121)
plt.imshow(resized_img)
print(resized_img.shape)        # (2160, 3240, 3)
# 图片的缩小
small_img = cv2.resize(img,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_LINEAR)
plt.subplot(122)
plt.imshow(small_img)
print(small_img.shape)          # (540, 810, 3)
plt.show()

在这里插入图片描述

三.图像平移

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("BIT.jpg")
height,width = img.shape[:2]             # img.shape有三位,只需要前面两位
M1 = np.float32([[1,0,100],[0,1,50]])    # 平移矩阵,图像向右移动100个像素,向下移动50个像素
M2 = np.float32([[1,0,-100],[0,1,-50]])  # 平移矩阵,图像向左移动100个像素,向上移动50个像素
move_img = cv2.warpAffine(img,M1,(width,height))
print(move_img.shape)                    # (1080, 1620, 3)图片大小没有改变,位置改变
plt.imshow(move_img)
plt.show()

结果为(在(1080, 1620)的范围内绘图,空缺用黑色填补,移出去的部分舍去):
在这里插入图片描述

四.图像的旋转

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("BIT.jpg")
height,width = img.shape[:2]                # img.shape有三位,只需要前面两位
center = (width // 2.0 , height // 2.0)     # 确定旋转中心,//表示整除
M3 = cv2.getRotationMatrix2D(center,90,1)   # 90表示逆时针,-90表示顺时针,1表示旋转过程没有缩放
rotation = cv2.warpAffine(img,M3,(width,height))
plt.imshow(rotation)
plt.show()

结果为(依然是按照(width,height)尺寸输出):
在这里插入图片描述

五.图片的仿射变换

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("BIT.jpg")
height,width = img.shape[:2]        # img.shape有三位,只需要前面两位
p1 = np.float32([[120,35],[215,45],[135,120]])
p2 = np.float32([[135,40],[300,100],[130,230]])
M4 = cv2.getAffineTransform(p1,p2)  # 计算一个变换矩阵
trans_img = cv2.warpAffine(img,M4,(width,height))
plt.imshow(trans_img)
plt.show()

在这里插入图片描述

六.图像的裁剪

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("BIT.jpg")
crop_img = img[20:500,200:700]  # 确定好像素位置就好
plt.imshow(crop_img)
plt.show()

在这里插入图片描述

七.图像的位运算,AND,OR,XOR

import cv2
import matplotlib.pyplot as plt
import numpy as np
rectangle = np.zeros((300,300),dtype='uint8')  # 创建画布
circle_img = cv2.circle(rectangle,(150,150),150,255,-1)
# 在画布中创建另一个圆形画布,(300,300)表示圆心,150表示半径,255表示颜色
plt.subplot(121)
plt.imshow(circle_img)
rect_img = cv2.rectangle(rectangle,(25,25),(275,275),255,-1)
# 在画布中创建另一个小长方形画布,(25,25),(275,275)表示左上角和右下角坐标
plt.subplot(122)
plt.imshow(rect_img )
plt.show()

在这里插入图片描述
可以看到,在创建好的画布中绘图是有叠加关系的,在创建rect_img时画面中已经有了圆的图案,如果想实现两个图形之间的与或非运算,要为两个不同的图形创建不同的画布,如下段例程。

# 图像的与、或、异或运算
import cv2
import matplotlib.pyplot as plt
import numpy as np
rectangle = np.zeros((300,300),dtype='uint8')  # 创建画布
circle_img = cv2.circle(rectangle,(150,150),150,255,-1)
rectangle = np.zeros((300,300),dtype='uint8')  # 创建画布
rect_img = cv2.rectangle(rectangle,(25,25),(275,275),255,-1)
and_img = cv2.bitwise_and(rect_img , circle_img)  # AND与运算
or_img = cv2.bitwise_or(rect_img , circle_img)  # OR或运算
xor_img = cv2.bitwise_xor(rect_img , circle_img)  # XOR异或运算
plt.subplot(131)
plt.imshow(and_img)
plt.subplot(132)
plt.imshow(or_img)
plt.subplot(133)
plt.imshow(xor_img)
plt.show()

在这里插入图片描述

八.图像的分离和融合

# 分离split
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("BIT.jpg")
(B,G,R) = cv2.split(img)
plt.subplot(131)
plt.imshow(B)
plt.subplot(132)
plt.imshow(G)
plt.subplot(133)
plt.imshow(R)
plt.show()

在这里插入图片描述

# 融合merge
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("BIT.jpg")
(B,G,R) = cv2.split(img)
zeros = np.zeros(img.shape[:2],dtype="uint8")
plt.imshow(cv2.merge([zeros,zeros,R]))  # 融合merge方法
plt.show()

在这里插入图片描述

九.颜色空间

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("BIT.jpg")
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  # 灰度化
plt.subplot(131)
plt.imshow(gray)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)    # hsv颜色空间
plt.subplot(132)
plt.imshow(hsv)
lab = cv2.cvtColor(img,cv2.COLOR_BGR2LAB)    # lab颜色空间
plt.subplot(133)
plt.imshow(lab)
plt.show()

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值