苏州品牌网站设计,站长工具seo综合查询columbu cat,做日用品的要找什么网站,店铺推广渠道有哪些方式查找、绘制轮廓、圆形矩形轮廓和近似轮廓 目录 查找、绘制轮廓、圆形矩形轮廓和近似轮廓1 轮廓查找和绘制1.1 轮廓查找1.1.1 函数和参数1.1.2 返回值 1.2 轮廓绘制1.2.1 函数和参数 1.3 步骤1.4 实际测试绘制轮廓 2 绘制近似轮廓2.1 函数和参数2.2 查找特定轮廓2.3 近似轮廓测试…查找、绘制轮廓、圆形矩形轮廓和近似轮廓 目录 查找、绘制轮廓、圆形矩形轮廓和近似轮廓1 轮廓查找和绘制1.1 轮廓查找1.1.1 函数和参数1.1.2 返回值 1.2 轮廓绘制1.2.1 函数和参数 1.3 步骤1.4 实际测试绘制轮廓 2 绘制近似轮廓2.1 函数和参数2.2 查找特定轮廓2.3 近似轮廓测试 3 绘制圆形矩形轮廓3.1 圆形函数和参数3.2 矩形函数和参数3.3 实际测试 1 轮廓查找和绘制 1.1 轮廓查找
1.1.1 函数和参数
cv2.findContours(图片,检索方式,轮廓近似方法)
图片最好为二值图即非黑即白非0即255检索方式 cv2.RETR_TREE,只检测外轮廓cv2.RETR_LIST检测轮廓不建立等级关系所有轮廓在同一等级cv2.RETR_CCOMP检测轮廓建立两个等级关系一个对象的外轮廓是第一级组织结构内部空洞轮廓为第二级组织机构空洞中的任何对象的轮廓又是第一级组织机构cv2.RETR_TREE返回所有轮廓建立一个完整的组织机构轮廓 轮廓近似方法 cv2.CHAIN_APPROX_NONE存储所有轮廓点cv2.CHAIN_APPROX_SIMPLE压缩模式只保留该方向的终点坐标
1.1.2 返回值
_,contours,hier cv2.findContours(con_binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
contours,包括查找的所有轮廓的list对象其中每一个独立的轮廓信息以边界点坐标x,y存在numpy数组中hierarchy轮廓层次结构[当前轮廓同层下一轮廓,当前轮廓同层上衣轮廓,当前轮廓子轮廓,当前轮廓父轮廓]
1.2 轮廓绘制
1.2.1 函数和参数
con_con cv2.drawContours(img片,contourscontours,contourIdx-1,color(255,0,0),thickness3)
img绘制轮廓的图片contourscontours轮廓,contourIdx-1轮廓索引值,-1表示全部color(255,0,0)绘制线条颜色,thickness3线条大小 返回值为根据设置绘制轮廓的图像
1.3 步骤
图片灰度图二值图根据二值图查找轮廓返回轮廓根据返回轮廓在图像上绘制轮廓返回图像
1.4 实际测试绘制轮廓
原图
代码展示
import cv2
con cv2.imread(con.png)
con_0 cv2.imread(con.png,0)
r,con_binary cv2.threshold(con_0,125,255,cv2.THRESH_BINARY)
_,contours,hier cv2.findContours(con_binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
con_copy con.copy()
con_con_1 cv2.drawContours(con_copy,contourscontours,contourIdx-1,color(255,0,0),thickness3)
con_copy con.copy()
con_con1 cv2.drawContours(con_copy,contourscontours,contourIdx1,color(255,0,0),thickness3)
cv2.imshow(con,con )
cv2.waitKey(0)
cv2.imshow(con_binary,con_binary)
cv2.waitKey(0)
cv2.imshow(con_con1,con_con1)
cv2.waitKey(0)
cv2.imshow(con_con_1,con_con_1)
cv2.waitKey(0)运行结果
2 绘制近似轮廓 2.1 函数和参数
arc_00050.005*cv2.arcLength(contours[1],True)计算轮廓长度 0.005表示近似的程度值越小近似的点越多值越大近似的点越少线条越多少contours[1]为要近似的目标轮廓True表示曲线是闭合arc_0005为返回值为近似后的轮廓周长数值 apporx_0005 cv2.approxPolyDP(max_area_con,arc_0005,True)返回值为逼近的轮廓需要加[]使用cv2.drawContours(con_copy,[apporx_0005],contourIdx-1,color(0,0,255),thickness3) con_copy绘制轮廓的图像[apporx_0005]返回的轮廓contourIdx-1表示索引全部color(255,0,0)绘制线条颜色thickness3线条大小
2.2 查找特定轮廓
这里找的是最大的轮廓 原图
代码展示
import cv2
con cv2.imread(wang.png)
con_0 cv2.imread(wang.png,0)
r,con_binary cv2.threshold(con_0,125,255,cv2.THRESH_BINARY)
_,contours,hier cv2.findContours(con_binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
con_area [(i,cv2.contourArea(i)) for i in contours]
## 排序
con_area_sorted sorted(con_area,keylambda x:x[1],reverseTrue)
max_area_con con_area_sorted[1][0]
arc_0005 0.005*cv2.arcLength(max_area_con,True)
apporx_0005 cv2.approxPolyDP(max_area_con,arc_0005,True)
con_copy con.copy()
con_0005 cv2.drawContours(con_copy,[apporx_0005],contourIdx-1,color(255,0,0),thickness3)
cv2.imshow(con,con)
cv2.waitKey(0)
cv2.imshow(con_0005,con_0005)
cv2.waitKey(0)运行结果 2.3 近似轮廓测试
原图
代码展示
import cv2
con cv2.imread(kl.jpg)
con_0 cv2.imread(kl.jpg,0)
r,con_binary cv2.threshold(con_0,125,255,cv2.THRESH_BINARY)
_,contours,hier cv2.findContours(con_binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
arc_0005 0.005*cv2.arcLength(contours[1],True)
arc_001 0.01*cv2.arcLength(contours[1],True)
arc_005 0.05*cv2.arcLength(contours[1],True)
apporx_0005 cv2.approxPolyDP(contours[1],arc_0005,True)
apporx_001 cv2.approxPolyDP(contours[1],arc_001,True)
apporx_005 cv2.approxPolyDP(contours[1],arc_005,True)
con_copy con.copy()
con_0005 cv2.drawContours(con_copy,[apporx_0005],contourIdx-1,color(0,0,255),thickness3)
con_copy con.copy()
con_001 cv2.drawContours(con_copy,[apporx_001],contourIdx-1,color(0,0,255),thickness3)
con_copy con.copy()
con_005 cv2.drawContours(con_copy,[apporx_005],contourIdx-1,color(0,0,255),thickness3)
cv2.imshow(con,con)
cv2.waitKey(0)
cv2.imshow(con_0005 ,con_0005)
cv2.waitKey(0)
# #
cv2.imshow(con_001,con_001)
cv2.waitKey(0)
cv2.imshow(con_005 ,con_005)
cv2.waitKey(0)运行结果
3 绘制圆形矩形轮廓 3.1 圆形函数和参数
(x,y),m cv2.minEnclosingCircle(contours[7]) x,y)坐标,m圆形轮廓半径contours[7]轮廓 circle cv2.circle(con_copy,(int(x),int(y)),int(m),(255,0,0),2) con_copy绘制图像(int(x),int(y)),int(m)坐标和半径要求是整数(255,0,0)颜色,2线条大小circle返回的绘制好的图像
3.2 矩形函数和参数
x,y,w,h cv2.boundingRect(contours[7]) x,y,w,h x,y)起始坐标矩形轮廓宽高 rectangle cv2.rectangle(con_copy,(x,y),(xw,yh),(255,0,0),2)(x,y)起始坐标,(xw,yh)矩形结束坐标
3.3 实际测试
原图
代码展示
import cv2
con cv2.imread(con.png)
con_0 cv2.imread(con.png,0)
r,con_binary cv2.threshold(con_0,125,255,cv2.THRESH_BINARY)
_,contours,hier cv2.findContours(con_binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
(x,y),m cv2.minEnclosingCircle(contours[7])
con_copy con.copy()
circle cv2.circle(con_copy,(int(x),int(y)),int(m),(255,0,0),2)
x,y,w,h cv2.boundingRect(contours[7])
con_copy con.copy()
rectangle cv2.rectangle(con_copy,(x,y),(xw,yh),(255,0,0),2)
cv2.imshow(circle,circle)
cv2.waitKey(0)
cv2.imshow(rectangle,rectangle)
cv2.waitKey(0)运行结果