注释详细
1.图像维度:打印出的结果分别为图片像素的横行、纵列和三原色彩色通道
import cv2
img=cv2.imread('pictures//3.png')
print(img.shape)
cv2.imshow("img",img)#窗口名、变量名
cv2.waitKey(0)
2.图像彩色通道:1张彩色图片(BGR)=3张灰度图,BGR(opencv顺序):Blue,Green,Red
import cv2
img=cv2.imread('pictures//3.png')
cv2.imshow("blue",img[:,:,0])
cv2.imshow("green",img[:,:,1])
cv2.imshow("red",img[:,:,2])#窗口名、变量名
cv2.waitKey(0)
import cv2
img=cv2.imread('pictures//3.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转为灰度图
cv2.imshow("gray",gray)
cv2.waitKey(0)
灰色但有层次感
4.图像裁剪:裁剪参数是先横行再纵列
import cv2
img=cv2.imread('pictures//3.png')
crop=img[5:120,50:200]#裁剪横行、纵列
cv2.imshow("crop",crop)
cv2.waitKey(0)
5.图像绘制
import cv2
import numpy as np
img=np.zeros([400,400,3],dtype=np.uint8)#无符号8位整数,创建了一个黑色画布
cv2.line(img,(10,10),(10,300),(255,0,0),3)#画线段,起点、终点、三原色、粗细
cv2.rectangle(img,(30,10),(100,300),(100,100,0),3)
cv2.circle(img,(200,150),50,(0,0,255),3)#圆心、半径、颜色、粗细
cv2.putText(img,"hello",(200,250),4,1.5,(255,255,255),3)#图片、文字、起始位置、字体类型、大小、颜色、粗细
cv2.imshow('img',img)
cv2.waitKey(0)
6.均值滤波:减少噪点
import cv2
from numpy.ma.extras import medianimg=cv2.imread('pictures//4.jpeg')
cv2.imshow('img',img)
gauss=cv2.GaussianBlur(img,(5,5),0)#图像、高斯核大小必须是正奇数、边界
cv2.imshow('gauss',gauss)
median=cv2.medianBlur(img,5)#图像、滤波器大小必须是正奇数
cv2.imshow('median',median)
cv2.waitKey(0)
7.图像特征提取:提取转角
import cv2
img=cv2.imread('pictures//3.png')
g=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
corners=cv2.goodFeaturesToTrack(g,500,0.1,10)#最多返回500个点,点的质量由于0.1,点间距大于10像素
for corner in corners:x,y=corner.ravel()#标记点cv2.circle(img,(int(x),int(y)),5,255,2)#在找到的点处画圆cv2.imshow('img',img)
cv2.waitKey(0)
8.模板匹配
import cv2
import numpy as np
img=cv2.imread('pictures//5.webp')
g=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#调灰
t=g[35:100,180:270]#从灰度图像中截出后续匹配模板
m=cv2.matchTemplate(g,t,cv2.TM_CCOEFF_NORMED)#原图像(灰度图)、模板图像(灰度图)、匹配方法(归一化的相关系数匹配法)
l=np.where(m >= 0.9)#查找匹配度大于或等于0.9的所有位置,l是一个元组,包含匹配点的行、列索引
w,h=t.shape[:2]#返回模板的行数和列数,shape内有3个参数,返回前两个
for p in zip(*l[::-1]):#zip是并行地处理处理多个可迭代对象的元素,将l返回的两个行列索引组成坐标x1,y1=p[0],p[1]x2,y2=x1+w,y1+hcv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)#框出目标位置
cv2.imshow('img',img)
cv2.waitKey(0)
9.图像的梯度算法
import cv2
g=cv2.imread('pictures//2.webp',cv2.IMREAD_GRAYSCALE)#转为灰度图
l=cv2.Laplacian(g,cv2.CV_64F)#拉普拉斯算子检测边缘,(图像、指定输出图像深度)
canny=cv2.Canny(g,100,200)#canny算法检测边缘(图像、低阈值、高阈值)
cv2.imshow('l',l)
cv2.imshow('canny',canny)
cv2.waitKey(0)
10.阈值算法:
自适应阈值算法,就是把图片分成许多区域,这样可以减少一张图片上明暗不均的影响
import cv2
g=cv2.imread('pictures//2.webp',cv2.IMREAD_GRAYSCALE)#转为灰度图
ret,binary=cv2.threshold(g,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)#图像、阈值初始值(设为0,因为Otsu自动计算阈值)、二值化后的最大值、二值化方法
#red计算最佳阈值,binary是经过二值化的图像
cv2.imshow('binary',binary)
cv2.waitKey(0)
11.图像形态学算法:腐蚀、膨胀
import cv2
import numpy as np
# 读取图像并转换为灰度图
gray = cv2.imread("pictures//3.png", cv2.IMREAD_GRAYSCALE)
# 对灰度图进行二值化处理
ret, binary = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV)
# 定义腐蚀操作的结构元素
kernel = np.ones((6,6), np.uint8)#创建5*5的矩形结构元素
# 对二值化图像进行腐蚀操作
erosion = cv2.erode(binary, kernel)
#膨胀
dilation = cv2.dilate(erosion, kernel)
# 显示原始二值化图像和腐蚀后的图像
cv2.imshow("binary", binary)
cv2.imshow("erosion", erosion)
cv2.imshow("dilation", dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()