(超全)python图像处理详细解析(4)

发布于:2024-04-29 ⋅ 阅读:(31) ⋅ 点赞:(0)

34.边缘检测

(1)sobel算子:可用来检测边缘
(2)scharr算子:同sobel算子
(3)prewitt算子:同sobel算子
(4)canny算子:canny算子也是用于提取边缘特征,但它不是放在filters模块,而是放在feature模块

from skimage import data,filters,feature
import matplotlib.pyplot as plt

img=io.imread('iii.jpg')

plt.subplot(231)  
plt.title('1')
plt.imshow(img,plt.cm.gray)

plt.subplot(232)  
plt.title('2')
edges2 = filters.sobel(img)
plt.imshow(edges2,plt.cm.gray)

plt.subplot(233)  
plt.title('3')
img_gray3 = color.rgb2gray(img)
edges3 = filters.sobel(img_gray3)
plt.imshow(edges3)

plt.subplot(234)  
plt.title('4')
img_gray4 = color.rgb2gray(img)
edges4 = filters.scharr(img_gray4)
plt.imshow(edges4)

plt.subplot(235)  
plt.title('5')
img_gray5 = color.rgb2gray(img)
edges5 = filters.prewitt(img_gray5)
plt.imshow(edges5)

#canny算子
plt.subplot(236)  
plt.title('6')
img_gray6 = color.rgb2gray(img)
edges6 = feature.canny(img_gray6)

plt.imshow(edges6)

在这里插入图片描述

35.gabor滤波

gabor滤波可用来进行边缘检测和纹理特征提取。

from skimage import data,filters,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
img_gray = color.rgb2gray(img)
#
filt_real, filt_img = filters.gabor(img_gray,frequency=0.6)   
 
plt.figure('gabor',figsize=(8,8))
 
plt.subplot(121)
plt.title('filt_real')
plt.imshow(filt_real,plt.cm.gray)  

plt.subplot(122)
plt.title('filt-imag')
plt.imshow(filt_img,plt.cm.gray)
 
plt.show()

在这里插入图片描述

36.画线条

skimage.draw.line(r1,c1,r2,c2)
r1,r2: 开始点的行数和结束点的行数
c1,c2: 开始点的列数和结束点的列数

from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
#表示从(120,50)到(120,240)连一条线
rr,cc=draw.line(120,50,120,240)
img[rr,cc] = 255
plt.imshow(img,plt.cm.gray)

在这里插入图片描述
绘制其他颜色线条

from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
rr,cc=draw.line(120,50,120,240)
#绘制颜色线条
draw.set_color(img,[rr,cc],[0,0,100])
# img[rr,cc] = 255
plt.imshow(img,plt.cm.gray)

在这里插入图片描述

37.画实心圆

skimage.draw.circle(cy, cx, radius)
cy和cx表示圆心点,radius表示半径

from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
#圆心点坐标为(120,120),半径为30
rr,cc=draw.disk((120,120),30)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)

在这里插入图片描述

38.画四边形

skimage.draw.polygon(Y,X)
Y为多边形顶点的行集合,X为各顶点的列值集合。

from skimage import data,draw,color
import matplotlib.pyplot as plt
import numpy as np
img=io.imread('iii.jpg')
#设置四个顶点,所以是四边形
Y=np.array([10,10,60,100])
X=np.array([100,180,220,180])
#Y为多边形顶点的行集合,X为各顶点的列值集合。
rr,cc=draw.polygon(Y,X)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)

在这里插入图片描述

39.画六边形

from skimage import data,draw,color
import matplotlib.pyplot as plt
import numpy as np
img=io.imread('iii.jpg')
#设置六个顶点,所以是六边形
Y=np.array([10,10,60,100,100,60])
X=np.array([100,180,220,180,100,60])
rr,cc=draw.polygon(Y,X)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)

在这里插入图片描述

40.画椭圆形

skimage.draw.ellipse(cy, cx, yradius, xradius)
cy和cx为中心点坐标,yradius和xradius代表长短轴。

from skimage import data,draw,color
import matplotlib.pyplot as plt
img=io.imread('iii.jpg')
#50和150为中心坐标,30和80表示短轴和长轴
rr,cc=draw.ellipse(50,150,30,80)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)

在这里插入图片描述

41.画空心圆

skimage.draw.circle_perimeter(yx,yc,radius)
yx,yc是圆心坐标,radius是半径

from skimage import data,draw,color
import matplotlib.pyplot as plt
img = io.imread('iii.jpg')
#150和150 表示圆心坐标,50表示半径
rr, cc=draw.circle_perimeter(150,150,50)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)

在这里插入图片描述

42.平移图像

matplotlib.pyplot通常用于绘图,matplotlib.image用于加载图像,Affine2D来自matplotlib.transforms模块,用于进行2D仿射变换。

# 导入所需的库
# matplotlib.pyplot 用于创建图形和子图
# matplotlib.image 用于读取图像文件
# matplotlib.transforms 用于创建变换对象
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib.transforms import Affine2D
# 读取图像文件 'iii.jpg' 并将其存储在变量 img 中
img = mpimg.imread('iii.jpg')
# 创建一个图形,命名为 'gabor',并设置其尺寸为 8x8 英寸
plt.figure('gabor',figsize=(8,8))
# 设置x轴的范围为 -100 到 100
plt.xlim(-100, 100)

plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title('1')
plt.axis('off')

plt.subplot(1, 2, 2)
# 创建一个变换对象,将图像平移 150 个单位
transform = Affine2D().translate(150, 150)  
#transform 与 plt.gca().transData 相加,您可以确保变换是应用在数据坐标上的,而不是显示坐标上。
plt.imshow(img, transform=transform + plt.gca().transData)
plt.title('2')
plt.axis('off')

plt.show()

在这里插入图片描述

43.图像的镜像

逆时针旋转,水平翻转,垂直翻转

# matplotlib.pyplot 用于创建图形和子图
# matplotlib.image 用于读取图像文件
# numpy 用于处理图像数据
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import numpy as np

img = mpimg.imread('iii.jpg')
#对图像进行逆时针旋转90度
rotated_img = np.rot90(img)
#对图像进行水平翻转
flipped_img_horizontal = np.fliplr(img)
#对图像进行垂直翻转
flipped_img_vertical = np.flipud(img)  

plt.subplot(2, 2, 1) 
plt.imshow(img) 
plt.title('Original Image')
plt.axis('off')

plt.subplot(2, 2, 2) 
plt.imshow(rotated_img) 
plt.title('Rotated Image')
plt.axis('off')

plt.subplot(2, 2, 3) 
plt.imshow(flipped_img_horizontal) 
plt.title('Flipped Horizontal Image')
plt.axis('off')

plt.subplot(2, 2, 4) 
plt.imshow(flipped_img_vertical) 
plt.title('Flipped Vertical Image')
plt.axis('off')

plt.show()

在这里插入图片描述