赞
踩
注意:文中cv使用前先执行 import cv2 as cv
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False# 图像读取
img = cv.imread("D:\\true.jpg")
img2 = cv.imread("D:\\w_b.jpg")
#创建核结构
kernel = np.ones((5,5),np.uint8)#图像的开闭运算
cvOpen = cv.morphologyEx(img,cv.MORPH_OPEN,kernel)
cvClose = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel)
cvTop = cv.morphologyEx(img2,cv.MORPH_TOPHAT,kernel)
cvBlack = cv.morphologyEx(img2,cv.MORPH_BLACKHAT,kernel)## 图像展示
fig,axes = plt.subplots(nrows=4,ncols=2,figsize=(6,16),dpi=100)
axes[0,0].imshow(img)
axes[0,0].set_title("原图")
axes[0,1].imshow(cvOpen)
axes[0,1].set_title("开运算")
axes[1,0].imshow(img)
axes[1,0].set_title("原图")
axes[1,1].imshow(cvClose)
axes[1,1].set_title("闭运算")
axes[2,0].imshow(img2)
axes[2,0].set_title("原图")
axes[2,1].imshow(cvTop)
axes[2,1].set_title("礼帽运算")
axes[3,0].imshow(img2)
axes[3,0].set_title("原图")
axes[3,1].imshow(cvBlack)
axes[3,1].set_title("黑猫运算")
plt.show()
#读取图像
img = cv.imread("E:\\01.jpg",0)
#计算Sobel卷积结果,存在小于0或者大于255的结果所有使用cv.CV_16S
x_Sobel = cv.Sobel(img,cv.CV_16S,1,0)#x方向
y_Sobel = cv.Sobel(img,cv.CV_16S,0,1)#y方向
#Scharr算子进行边缘检测,存在小于0或者大于255的结果所有使用cv.CV_16S
x_Scharr = cv.Sobel(img,cv.CV_16S,1,0,ksize=-1)#x方向
y_Scharr = cv.Sobel(img,cv.CV_16S,0,1,ksize=-1)#y方向
#Laplacian算子进行边缘检测,存在小于0或者大于255的结果所有使用cv.CV_16S
result_Laplacian = cv.Laplacian(img,cv.CV_16S)#将数据进行转换,图像处理万后转回uiut8格式否则图像无法显示
Scale_Sobel_absx = cv.convertScaleAbs(x_Sobel)
Scale_Sobel_absy = cv.convertScaleAbs(y_Sobel)
Scale_Scharr_absx = cv.convertScaleAbs(x_Scharr)
Scale_Scharr_absy = cv.convertScaleAbs(y_Scharr)
Laplacian_abs = cv.convertScaleAbs(result_Laplacian)#结果合成
result_Sobel = cv.addWeighted(Scale_Sobel_absx,0.5,Scale_Sobel_absy,0.5,0)
result_Scharr = cv.addWeighted(Scale_Scharr_absx,0.5,Scale_Scharr_absy,0.5,0)#Canny边缘检测
canny = cv.Canny(img,0,100)#显示图像
fig,axes = plt.subplots(nrows=4,ncols=2,figsize=(10,16),dpi=100)
axes[0,0].imshow(img,cmap="gray")
axes[0,0].set_title("原图")
axes[0,1].imshow(result_Sobel,cmap="gray")
axes[0,1].set_title("Sobel结果")
axes[1,0].imshow(img,cmap="gray")
axes[1,0].set_title("原图")
axes[1,1].imshow(result_Scharr,cmap="gray")
axes[1,1].set_title("Scharr结果")
axes[2,0].imshow(img,cmap="gray")
axes[2,0].set_title("原图")
axes[2,1].imshow(Laplacian_abs,cmap="gray")
axes[2,1].set_title("Laplacian结果")
axes[3,0].imshow(img,cmap="gray")
axes[3,0].set_title("原图")
axes[3,1].imshow(canny,cmap="gray")
axes[3,1].set_title("Canny结果")
plt.show()
#图像和模板读取
img = cv.imread("E:\\IMGL8129.jpg")
template = cv.imread("E:\\eyes.jpg")#模板匹配
res = cv.matchTemplate(img,template,cv.TM_SQDIFF)#平方差匹配
#res = cv.matchTemplate(img,template,cv.TM_CCORR)#相关匹配#返回图像中最匹配的位置,确定左上角坐标,并将匹配位置绘制在图像上
min_val,max_val,min_loc,max_loc = cv.minMaxLoc(res)#平方差匹配最小值为最佳匹配位置
top_left = min_loc# top_left = max_val
bottom_right = (top_left[0] + w,top_left[1] + h)
cv.rectangle(img,top_left,bottom_right,(0,255,0),2)#绘制匹配位置#显示图像
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121)
plt.imshow(template[:,:,::-1])
plt.title("模板")
plt.subplot(122)
plt.imshow(img[:,:,::-1])
plt.title("匹配结果")
plt.show()
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import random
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False#加载图片,转为二值图
img = cv.imread("E:\\parking.jpg")
img_copy = np.copy(img)
img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
edges = cv.Canny(img_gray,50,150)#霍夫直线变换
lines = cv.HoughLines(edges,0.8,np.pi/180,150)
#将检测的直线绘制在图像上(注意:是极坐标)
for line in lines:
#print(line)
rho,theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
cv.line(img_copy,(x1,y1),(x2,y2),(0,0,255))#显示图像
fig,axes = plt.subplots(nrows=2,ncols=2,figsize=(10,8),dpi=100)
axes[0,0].imshow(img)
axes[0,0].set_title("原图")
axes[0,1].imshow(edges)
axes[0,1].set_title("Canny")
axes[1,0].imshow(img)
axes[1,0].set_title("原图")
axes[1,1].imshow(img_copy)
axes[1,1].set_title("霍夫变换线检测")
plt.show()
img_cicle = cv.imread("E:\\01.jpg")
img_cicle_gray = cv.cvtColor(img_cicle,cv.COLOR_BGR2GRAY)#中值滤波
img_blur = cv.medianBlur(img_cicle_gray,7)#霍夫圆检测
circle = cv.HoughCircles(img_blur,cv.HOUGH_GRADIENT,1,100,param1=60,param2=40,minRadius=0,maxRadius=100)c = circle[0][0]
cv.circle(img_cicle,(c[0],c[1]),c[2],(255,0,0),2)#(c[0],c[1])圆心 c[2]半径
#cv.circle(img_cicle,238,2,(0,255,0),-1) #圆点填充plt.imshow(img_cicle)
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False#Harris检测
img = cv.imread("E:\\b_w.jpg")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)#转换数据格式
gray = np.float32(gray)#src:数据类型为float32,blockSize角点检测中考虑的邻域大小,ksize:sobei求导使用的核大小,k:角点检测方程中的自由参数[0.04,0.06]
dst = cv.cornerHarris(gray,2,3,0.04)
img[dst>0.001*dst.max()] = (0,0,255)
plt.figure(figsize=(10,10),dpi=100)
plt.imshow(img[:,:,::-1])
tomas检测
img2 = cv.imread("E:\\kuchalou.jpg")
gray2 = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)#corners:检测到的角点 = cv.goodFeaturesToTrack(img:输入灰度图像,maxCorners:获取角点数的数目,qualityLevel:最低可接受的焦点质量水平(0-1),minDistance:角点间最小的欧式距离
corners = cv.goodFeaturesToTrack(gray2,1000,0.01,10)for i in corners:
x,y = i.ravel()#评估为坐标
cv.circle(img2,(x,y),2,(0,0,255),-1)plt.figure(figsize=(10,10),dpi=100)
plt.imshow(img2[:,:,::-1])
plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。