当前位置:网站首页>OpenCV的轮廓检测和阈值处理综合运用
OpenCV的轮廓检测和阈值处理综合运用
2022-06-27 05:14:00 【Keep_Trying_Go】
文章目录
1.轮廓查找和绘制轮廓
https://mydreamambitious.blog.csdn.net/article/details/125339604
2.Opencv中的多变形的逼近和凸包
https://mydreamambitious.blog.csdn.net/article/details/125340595
3.Opencv全局二值化和局部二值化
https://mydreamambitious.blog.csdn.net/article/details/125249121
4.什么是图像Mask
https://www.cnblogs.com/skyfsm/p/6894685.html
5.图像的基本转转(翻转等)
https://mydreamambitious.blog.csdn.net/article/details/125428402
6.Opencv中计算轮廓的周长和面积
https://mydreamambitious.blog.csdn.net/article/details/125340081
7.代码实战
(1)对图像进行进行翻转和缩放处理
#对图片进行翻转,Opencv读取的图片和我们正常的显示方式相反
img=cv2.flip(src=frame,flipCode=2)
img=cv2.resize(src=img,dsize=(600,600))
(2)去除背景
#去除背景
bgsegment=cv2.createBackgroundSubtractorMOG2()
#转换为灰度图
img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2GRAY)
img = bgsegment.apply(img)
(3)高斯处理和二值化处理
#对图像进行高斯噪声处理
gauss=cv2.GaussianBlur(src=img,ksize=(3,3),sigmaX=0)
#图像二值化
ok, dst = cv2.threshold(src=gauss, thresh=70, maxval=255, type=cv2.THRESH_BINARY)
(4)对图像腐蚀和膨胀操作
# 首先获取卷积核
kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(3, 3))
#对图像进行腐蚀
erode=cv2.erode(src=dst,kernel=kernel,iterations=1)
# canny=cv2.Canny(image=erode,threshold1=50,threshold2=100)
#对图像进行膨胀
dilate=cv2.dilate(src=erode,kernel=kernel,iterations=1)
(5)轮廓查找
#查找轮廓
contours,hierarchy=cv2.findContours(image=dilate,mode=cv2.RETR_TREE,
method=cv2.CHAIN_APPROX_SIMPLE)
(6)找出面积最大的轮廓并进行轮廓的绘制
#找到其中最大的轮廓
index=0
maxArea=0
length=len(contours)
if length>0:
for i in range(length):
#计算轮廓的面积
area=cv2.contourArea(contours[i])
if area>maxArea:
maxArea=area
index=i
# print('len(contours)= {} ; index={}'.format(len(contours),index))
#首先绘制图像的形状
image=np.zeros(shape=frame.shape,dtype=np.uint8)
res=contours[index]
cv2.drawContours(image=image,contours=[res],
contourIdx=0,color=(0,255,0),thickness=2)
#绘制凸包
hull=cv2.convexHull(points=res)
cv2.drawContours(image=image,contours=[hull],contourIdx=0,
color=(0,0,255),thickness=3)
(7)代码综合
import os
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
#去除背景
bgsegment=cv2.createBackgroundSubtractorMOG2()
while cap.isOpened():
OK,frame=cap.read()
if OK==False:
break
#对图片进行翻转,Opencv读取的图片和我们正常的显示方式相反
img=cv2.flip(src=frame,flipCode=2)
img=cv2.resize(src=img,dsize=(600,600))
#转换为灰度图
img=cv2.cvtColor(src=img,code=cv2.COLOR_BGR2GRAY)
img = bgsegment.apply(img)
#对图像进行高斯噪声处理
gauss=cv2.GaussianBlur(src=img,ksize=(3,3),sigmaX=0)
#图像二值化
ok, dst = cv2.threshold(src=gauss, thresh=70, maxval=255, type=cv2.THRESH_BINARY)
# 首先获取卷积核
kernel = cv2.getStructuringElement(shape=cv2.MORPH_RECT, ksize=(3, 3))
#对图像进行腐蚀
erode=cv2.erode(src=dst,kernel=kernel,iterations=1)
# canny=cv2.Canny(image=erode,threshold1=50,threshold2=100)
#对图像进行膨胀
dilate=cv2.dilate(src=erode,kernel=kernel,iterations=1)
#查找轮廓
contours,hierarchy=cv2.findContours(image=dilate,mode=cv2.RETR_TREE,
method=cv2.CHAIN_APPROX_SIMPLE)
#找到其中最大的轮廓
index=0
maxArea=0
length=len(contours)
if length>0:
for i in range(length):
#计算轮廓的面积
area=cv2.contourArea(contours[i])
if area>maxArea:
maxArea=area
index=i
# print('len(contours)= {} ; index={}'.format(len(contours),index))
#首先绘制图像的形状
image=np.zeros(shape=frame.shape,dtype=np.uint8)
res=contours[index]
cv2.drawContours(image=image,contours=[res],
contourIdx=0,color=(0,255,0),thickness=2)
#绘制凸包
hull=cv2.convexHull(points=res)
cv2.drawContours(image=image,contours=[hull],contourIdx=0,
color=(0,0,255),thickness=3)
cv2.imshow('image',image)
if cv2.waitKey(1)&0xFF==27:
break
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')
边栏推荐
猜你喜欢

Redis high availability cluster (sentry, cluster)

ES6 0622 III

流媒体协议初探(MPEG2-TS、RTSP、RTP、RTCP、SDP、RTMP、HLS、HDS、HSS、MPEG-DASH)
![[unity] button of UI interactive component & summary of optional base classes](/img/9f/be9005f03ad9a2bc8da0f910f064c5.png)
[unity] button of UI interactive component & summary of optional base classes

RTP 发送PS流工具(已经开源)

jq怎么获取元素的id名

Edge在IE模式下加载网页 - Edge设置IE兼容性

Microservice system design -- service registration, discovery and configuration design

【NIPS 2017】PointNet++:度量空间中点集的深层次特征学习

Microservice system design -- message caching service design
随机推荐
双位置继电器JDP-1440/DC110V
010 C language foundation: C function
Neo4j database export
使用域名转发mqtt协议,避坑指南
清华大学开源软件镜像站网址
Microservice system design -- API gateway service design
关于元器件封装的一些文章和一下我的体会
STM32 reads IO high and low level status
Terminal in pychar cannot enter the venv environment
微服务系统设计——统一鉴权服务设计
论文解读(LG2AR)《Learning Graph Augmentations to Learn Graph Representations》
微服务系统设计——服务熔断和降级设计
neo4j图数据库基本概念
第1章 绪论
Interview: what are the positioning methods in selenium? Which one do you use most?
unity点光源消失
pycharm 如何安装 package
016 C language foundation: C language enumeration type
golang hello 安装环境异常【已解决】
Microservice system design -- distributed cache service design