目录
1、导包
2、加载、显示、保存图片
3、图像转换
颜色转换
二值化
反色:
4、图像操作
膨胀、腐蚀运算
轮廓检测
轮廓填充
import cv2
import numpy as np
安装cv2:在cmd中输入 pip install opencv_python
编译器中无法显示路径但可以运行
img1 = cv2.imread("img1.jpg")
cv2.imshow("img1",img1)
cv2.waitKey(0)
cv2.imwrite("img2.jpg",img1)
1:文件读取不出来:需要注意是否使用的相对路径,且.py文件与图片在一个文件夹下。
若使用绝对路径,请勿直接复制下图中文件属性中的对象名称,会复制无法显示的字符,有神奇的bug。
2:waitKey()中为等待的毫秒数,若设置为0,则无限等待,代码会暂停运行。
# 转为灰度图像
gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
参数(传入的图像,使用的方法)
扩展:
颜色转换相关函数
ret,thresh = cv2.threshold(gray,175,255,cv2.THRESH_BINARY)
第一个返回值,在使用自动确定返回值的方法时返回阈值取值。
参考:自适应阈值
第二个返回值是处理后的图像。
ret,thresh1 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) ret,thresh2 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV) ret,thresh3 = cv2.threshold(gray,127,255,cv2.THRESH_TRUNC) ret,thresh4 = cv2.threshold(gray,127,255,cv2.THRESH_TOZERO) ret,thresh5 = cv2.threshold(gray,127,255,cv2.THRESH_TOZERO_INV)
img3 = cv2.bitwise_not(img2)
# 膨胀、腐蚀运算
kernel = np.ones((3,3),np.uint8)
thresh = cv2.dilate(thresh,kernel,iterations= 2)
cv2.imshow("thresh1",thresh)
cv2.waitKey(0)
thresh = cv2.erode(thresh,kernel,iterations= 2)
cv2.imshow("thresh2",thresh)
cv2.waitKey(0)
参数分别为:待操作图像,核,迭代次数
说人话:
膨胀:图像会变肥一圈
腐蚀:图像会变瘦一圈,如果足够细就会消失
(注意,以黑色为底色,变肥变瘦的对象为白色图形)
原理:定义一个kernel,在图像上进行卷积。膨胀:如果kernel中存在白色,那么这个像素点定义为白色。腐蚀为反操作。
先腐蚀后膨胀为开运算,用于去除微小瑕疵。反之为闭运算。
# 找出轮廓并在原图的复制中画出
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
draw_img1=img2.copy()
res=cv2.drawContours(draw_img1,contours,-1,(0,0,255),2)
cv2.imshow("res3",res)
cv2.waitKey(0)
findContours()可以找到图像中的轮廓,
contours为轮廓列表,储存轮廓的具体内容,本质是一个像素点列表,像素点可以组成闭合曲线。
hierarchy为轮廓之间的关系
drawContours()中的参数分别为:原图,轮廓列表,画第几个轮廓(-1为所有),颜色,轮廓宽度
contours可调用:
# contours为轮廓列表
contour=contours[0]
# 坐标
x, y, w, h = cv2.boundingRect(contour)
# 面积
area = cv2.contourArea(contour)
# 周长
length = cv2.arcLength(contour)
扩展:
轮廓检测参数
轮廓属性
img2=cv2.fillPoly(img1,contour,(255,255,255))
参数分别为:被填充图,轮廓,填充颜色
可用于操作轮廓,并填充指定颜色
你已经学会了所有的操作!接下来开始实战吧!
Python opencv的轮廓检测 基于车牌检测