AndreaDO

导航

opencv库图像基础2-python

opencv库图像基础2-python

图像的简单变换


先导入库

import cv2
import matplotlib.pyplot as plt
import numpy as np

1.图像的放大和缩小

使用函数cv2.resize()
放大图像

resized_img = cv2.resize(img,(width*2,height*2), interpolation=cv2.INTER_LINEAR)

这个代码的作用是将图像 img 的宽度和高度扩大两倍。它使用 OpenCV 库中的 cv2.resize() 函数来实现。
cv2.resize() 函数有三个参数:
img:要调整大小的图像。
dsize:调整大小后的图像的大小。它是一个元组,其中包含宽度和高度。
interpolation:插值方法。它用于在调整大小时插入新像素。
在本例中,dsize 参数的值为 (width2,height2),表示将宽度和高度扩大两倍。interpolation 参数的值为 cv2.INTER_LINEAR,表示使用双线性插值。

缩小图像

small_img = cv2.resize(img,None,fx=0.5,fy=0.5, interpolation=cv2.INTER_LINEAR)

将图片缩小为原图的一半,其中:
img 是原图。
small_img 是缩小后的图像。
fx 和 fy 是缩放比例,0.5 表示缩小一半。
interpolation 是插值方法,cv2.INTER_LINEAR 是双线性插值,是默认值。

2.图像平移

平移函数cv2.warpAffine

height,width=img.shape[:2]
M1 = np.float32([[1,0,100],[0,1,50]])
move_img = cv2.warpAffine(img,M1,(width,height))

其中:
img 是原图。
height 和 width 是原图的高度和宽度。
M1 是变换矩阵,表示平移操作。
move_img 是平移后的图像。
变换矩阵 M1 的每一行表示一个点在变换后的图像中的位置。在本例中,第一行表示原图中 (0,0) 点在变换后的图像中的位置为 (100,0),第二行表示原图中 (0,1) 点在变换后的图像中的位置为 (0,50)。
这个代码的作用是将原图 img 在右边平移 100 像素,在下平移 50 像素。

3.图像旋转

cv2.warpAffine()函数

height,width = img.shape[:2]
center = (width/2.0,height/2.0) #旋转的中心
M3 = cv2.getRotationMatrix2D(center, 180, 1) #旋转过程中没有缩放,这里180指的是顺时针180度
rotation_img = cv2.warpAffine(img,M3,(width,height))
plt.imshow(rotation_img)

4.图像仿射变换

p1=np.float32([[120,35],[215,45],[135,120]])
p2=np.float32([[135,45],[300,110],[130,230]])
M4=cv2.getAffineTransform(p1,p2) #计算一个变换矩阵
trans_img =cv2.warpAffine(img,M4,(width,height))
plt.imshow(trans_img)

5.图像裁剪

crop_img = img[20:500,200:400]
plt.imshow(crop_img)

6.图像的位运算

先创建两个图片,一个是矩形一个是圆形
矩形

rectangle=np.zeros((300,300),dtype='uint8')
rect_img=cv2.rectangle(rectangle,(25,25),(275,275),255,-1)
plt.imshow(rect_img)

输出

圆形

rectangle=np.zeros((300,300),dtype='uint8')
circle_img=cv2.circle(rectangle,(150,150),150,255,-1)
plt.imshow(circle_img)

输出

与运算

and_img=cv2.bitwise_and(rect_img,circle_img)
plt.imshow(and_img)


或运算

or_img=cv2.bitwise_or(rect_img,circle_img)
plt.imshow(or_img)


异或运算

xor_img=cv2.bitwise_xor(rect_img,circle_img)
plt.imshow(xor_img)

7.图像的分离与融合

分离

(B,G,R)=cv2.split(img)

融合

zeros = np.zeros(img.shape[:2],dtype='uint8')
plt.imshow(cv2.merge([zeros,zeros,R]))

8.颜色空间color space

灰度

gray =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
plt.imshow(gray)

HSV,色度,饱和度,纯度

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
plt.imshow(hsv)

lab,一个亮度通道,两个颜色通道

lab=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
plt.imshow(lab)

posted on 2024-01-03 14:38  AndreaDO  阅读(37)  评论(0)    收藏  举报