OpenCV

OpenCV是一个巨大的开源库,广泛用于计算机视觉,人工智能和图像处理领域。它在现实世界中的典型应用是人脸识别,物体检测,人类活动识别,物体跟踪等。

任务

现在,假设我们只需要从整个输入帧中检测到一个对象。因此,代替处理整个框架,如果可以在框架中定义一个子区域并将其视为要应用处理的新框架,该怎么办。我们要完成一下三个步骤:

  • 定义兴趣区

  • 在ROI中检测轮廓

  • 阈值检测轮廓轮廓线

什么是ROI?

简而言之,我们感兴趣的对象所在的帧内的子区域称为感兴趣区域(ROI)

我们如何定义ROI?

在输入帧中定义ROI的过程称为ROI分割。

在“ ROI细分”中,(此处)我们选择框架中的特定区域,并以矩形方法提供其尺寸,以便它将在框架上绘制矩形的ROI。


上图蓝色矩形覆盖的区域是我们ROI,现在,如果您也想绑定感兴趣的对象,那么我们可以通过在ROI中找到轮廓来实现。

什么是轮廓?

轮廓线是 表示或说是限制对象形状的轮廓。

如何在框架中找到轮廓?

对我而言,在将ROI框架设为阈值后,找到轮廓效果最佳。因此,要找到轮廓,手上的问题是-

什么是阈值?

阈值不过是图像分割的一种简单形式。这是将灰度或rgb图像转换为二进制图像的过程。



因此,在对rgb帧进行阈值处理后,程序很容易找到轮廓,因为由于ROI中感兴趣对象的颜色将是黑色(在简单的二进制脱粒中)或白色(在如上所述的反向二进制脱粒中),因此分割(将背景与前景即我们的对象分开)将很容易完成。

什么是图像MASK?

图像MASK是隐藏图像的某些部分并显示某些部分的过程。这是图像编辑的非破坏性过程。在大多数情况下,它使您可以在以后根据需要调整和调整遮罩。通常,它是一种有效且更具创意的图像处理方式。

因此,基本上在这里我们将掩盖ROI的背景。为此,首先我们将修复ROI的背景。然后,在固定背景之后,我们将从框架中减去背景,并用wewant背景(这里是一个简单的黑色框架)替换它。

Talk is cheap, show me the code
import cv2
import numpy as np
import copy
import mathx=0.5  # start point/total width
y=0.8  # start point/total width
threshold = 60  # BINARY threshold
blurValue = 7  # GaussianBlur parameter
bgSubThreshold = 50
learningRate = 0# variables
isBgCaptured = 0   # whether the background captureddef removeBG(frame): #Subtracting the backgroundfgmask = bgModel.apply(frame,learningRate=learningRate)kernel = np.ones((3, 3), np.uint8)fgmask = cv2.erode(fgmask, kernel, iterations=1)res = cv2.bitwise_and(frame, frame, mask=fgmask)return res# Camera
camera = cv2.VideoCapture(0)
camera.set(10,200)while camera.isOpened():ret, frame = camera.read()frame = cv2.bilateralFilter(frame, 5, 50, 100)  # smoothening filterframe = cv2.flip(frame, 1)  # flip the frame horizontallycv2.rectangle(frame, (int(x * frame.shape[1]), 0),(frame.shape[1], int(y * frame.shape[0])), (255, 0, 0), 2) #drawing ROIcv2.imshow('original', frame)#  Main operationif isBgCaptured == 1:  # this part wont run until background capturedimg = removeBG(frame)img = img[0:int(y * frame.shape[0]),int(x * frame.shape[1]):frame.shape[1]]  # clip the ROIcv2.imshow('mask', img)# convert the image into binary imagegray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)blur = cv2.GaussianBlur(gray, (blurValue, blurValue), 0)cv2.imshow('blur', blur)ret, thresh = cv2.threshold(blur, threshold, 255, cv2.THRESH_BINARY) #thresholding the framecv2.imshow('ori', thresh)# get the coutoursthresh1 = copy.deepcopy(thresh)contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #detecting contourslength = len(contours)maxArea = -1if length > 0:for i in range(length):  # find the biggest contour (according to area)temp = contours[i]area = cv2.contourArea(temp)if area > maxArea:maxArea = areaci = ires = contours[ci]hull = cv2.convexHull(res) #applying convex hull techniquedrawing = np.zeros(img.shape, np.uint8)cv2.drawContours(drawing, [res], 0, (0, 255, 0), 2) #drawing contours cv2.drawContours(drawing, [hull], 0, (0, 0, 255), 3) #drawing convex hullcv2.imshow('output', drawing)# Keyboard OPk = cv2.waitKey(10)if k == 27:  camera.release()cv2.destroyAllWindows()breakelif k == ord('b'):  # press 'b' to capture the backgroundbgModel = cv2.createBackgroundSubtractorMOG2(0, bgSubThreshold)isBgCaptured = 1print( 'Background Captured')elif k == ord('r'):  # press 'r' to reset the backgroundbgModel = NoneisBgCaptured = 0print ('Reset BackGround')

OpenCV的区域分割、轮廓检测和阈值处理相关推荐

  1. OpenCV中图像轮廓检测

    OpenCV中图像轮廓检测 通过之前的Canny方法可以得到图像的边界,但是我们无法得到边界的数学信息.所以就有了今天的图像轮廓检测. 在OpenCV中图像轮廓检测的API: findContours ...

  2. Opencv中的轮廓检测及应用

    在openCV中,我们可以对图片的轮廓进行检测,虽然轮廓的检测看起来很简单,只是对一个图形的边框进行描绘,但是,它在很多领域上都应用到了,例如:人脸识别.车辆检测.视频采集等,下面我会通过人脸识别和车 ...

  3. 基于OpenCV的区域分割、轮廓检测和阈值处理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 OpenCV是一个巨大的开源库,广泛用于计算机视觉,人工智能和图像 ...

  4. c# opencv 轮廓检测_基于OpenCV的区域分割、轮廓检测和阈值处理

    OpenCV是一个巨大的开源库,广泛用于计算机视觉,人工智能和图像处理领域.它在现实世界中的典型应用是人脸识别,物体检测,人类活动识别,物体跟踪等. 现在,假设我们只需要从整个输入帧中检测到一个对象. ...

  5. opencv:图像轮廓检测-细胞轮廓

    对于下面的图像,进行细胞(有彩色的都是细胞)的轮廓识别,要求分割尽可能准确,轮廓是封闭的曲线. 个人的思路: 第一:通过opencv读取图片: 第二:对原图进行灰度化处理,简化矩阵,提高处理速度: 第 ...

  6. opencv中关于轮廓检测识别Contours及相关函数的介绍

    最近在用vs和opencv库在做图像处理的项目,关于轮廓识别部分,我查阅了一些资料, 现结合自己的理解整理出来,希望能对你有用. 1.contours概述 在利用openCV对图像进行处理时,我们可能 ...

  7. 利用OpenCV进行图像的轮廓检测

    简 介: 本文对于OpenCV中的轮廓检测算法进行了讨论,可以看到一些基于轮廓检测的应用.接着对四种不同的提取方式的结果进行了讨论.你还了解了如何将轮廓进行绘制的方法. 关键词: 轮廓检测,二值化 § ...

  8. OpenCV学习——轮廓检测

    前言 轮廓检测是传统视觉中非常常用的功能,这里简单记录一下opencv中的轮廓检测算法使用方法,至于理论,后续有机会再去细品. 国际惯例: OpenCV官方的轮廓检测教程python版 OpenCV中 ...

  9. 【OpenCV入门指南】第五篇 轮廓检测 上

    <[OpenCV入门指南]第三篇Canny边缘检测>中介绍了边缘检测,本篇介绍轮廓检测,轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 在 ...

最新文章

  1. 2.软件项目管理软件
  2. 稀疏表示字典的显示(MATLAB实现代码)
  3. 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
  4. python sorted原理_Python sort()和sorted()
  5. java 界面位置_java界面中怎样设置位置
  6. linux关机_强制关机对电脑有什么危害?
  7. MBR、DBR、FAT32基础小知识
  8. dell 虚拟linux,戴尔:Linux是轻松构建虚拟主机的关键
  9. 某大型银行深化系统之十四:技术架构
  10. IntelliJ IDEA 2021.1.2 x64版的 IDEA 创建 jsp项目
  11. 教你用Access做个简易MIS管理系统
  12. 评选最佳文本编辑器-UltraEdit From善用佳软
  13. 由于未安装.net framework 4.0的miscrosoft office支持,无法加载以下解决方案 ***.vsto
  14. Xshell安装宝塔Linux面板教程
  15. Windows下编译apr、apr-util
  16. 新版火狐打开时会自动开启360导航
  17. 洋洋背古诗——寒假版
  18. 基于TQ2440的SPI驱动学习(OLED)
  19. 期货与期权的主要区别与联系?
  20. Java并发编程 - 共享模型之管程

热门文章

  1. python + snownlp 正负面分析
  2. 怎么给PDF文件进行压缩
  3. 生成式对抗网络GAN(一)—基于python实现
  4. python中openpyxl库用法详解
  5. 时间复杂度O(1),O(n),O(logn),O(nlogn)的意思
  6. 安装Gitblit版本控制服务器
  7. OnInit和OnLoad
  8. 如何创建一个带诊断工具的.NET镜像
  9. STM32擦写失败case
  10. Android源码编译(基于Ubuntu18.0.4)