当前位置:网站首页>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')
边栏推荐
- 导航【机器学习】
- 关于元器件封装的一些文章和一下我的体会
- 差点因为 JSON.stringify 丢了奖金...
- 018 C语言基础:C文件读写
- 019 basics of C language: C preprocessing
- Reading graph augmentations to learn graph representations (lg2ar)
- EPICS记录参考5 -- 数组模拟输入记录Array Analog Input (aai)
- Py2neo basic syntax
- Mechanical transcoding journal [17] template, STL introduction
- 016 C language foundation: C language enumeration type
猜你喜欢

Almost because of json Stringify lost his bonus

【Unity】UI交互组件之按钮Button&可选基类总结

RTP sending PS stream tool (open source)

差点因为 JSON.stringify 丢了奖金...

Microservice system design -- distributed transaction service design

jq怎么获取倒数的元素

Cognition - how to fill in 2022 college entrance examination volunteers

微服务系统设计——微服务调用设计

微服务系统设计——统一鉴权服务设计

Microservice system design -- distributed cache service design
随机推荐
three. JS first person camera gun following
STM32 reads IO high and low level status
Acwing's 57th weekly match -- BC question is very good
DAST 黑盒漏洞扫描器 第六篇:运营篇(终)
unity点光源消失
Microservice system design -- microservice monitoring and system resource monitoring design
微服务系统设计——消息缓存服务设计
How pychart installs packages
【FPGA】基于bt1120时序设计实现棋盘格横纵向灰阶图数据输出
006 C语言基础:C存储类
011 C language basics: C scope rules
pycharm 如何安装 package
Microservice system design -- message caching service design
Quick sort (non recursive) and merge sort
Pycharm 中 Terminal 无法进入 venv 环境的问题
012 C语言基础:C数组
EasyExcel合并相同内容单元格及动态标题功能的实现
重映像(STM32)
系统架构设计——互联网金融的架构设计
013 C语言基础:C指针