python opencv 画外接矩形框的完整代码
作者:LP点绛唇 发布时间:2023-02-25 05:00:46
标签:python,opencv,矩形框
画外接矩形框,可以画成一个最大的,也可以分别画。
# -*- coding: utf-8 -*-
import cv2
image = cv2.imread('G:/110w2/mask_tif4/00.png')
print(image.shape)
print(image.shape[0]) # h
print(image.shape[1]) # w
# 图像转灰度图
img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#cv2.imwrite('G:/110w2/mask_tif4/02.png', img)
# 图像转二值图
ret, thresh = cv2.threshold(img, 2, 255, cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
x1 = []
y1 = []
x2 = []
y2 = []
for c in contours:
# 找到边界坐标
x, y, w, h = cv2.boundingRect(c) # 计算点集最外面的矩形边界
print(x, y, w, h)
# 因为这里面包含了,图像本身那个最大的框,所以用了if,来剔除那个图像本身的值。
if x != 0 and y != 0 and w != image.shape[1] and h != image.shape[0]:
# 左上角坐标和右下角坐标
# 如果执行里面的这个画框,就是分别来画的,
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1)
x1.append(x)
y1.append(y)
x2.append(x + w)
y2.append(y + h)
x11 = min(x1)
y11 = min(y1)
x22 = max(x2)
y22 = max(y2)
# 这个是画出所有目标,都可以包含在内的,一个外接矩形框。
#cv2.rectangle(image, (x11, y11), (x22, y22), (0, 0, 255), 1)
#cv2.imshow("img", image)
cv2.imwrite('G:/110w2/mask_tif4/0_001.png', image)
cv2.waitKey(0)
# 功能:cv2.findContours()函数来查找检测物体的轮廓。
#参数:
# 参数1:寻找轮廓的图像,接收的参数为二值图,即黑白的(不是灰度图),所以读取的图像要先转成灰度的,再转成二值图
# 参数2: 轮廓的检索模式,有四种。
# cv2.RETR_EXTERNAL 表示只检测外轮廓;
# cv2.RETR_LIST 检测的轮廓不建立等级关系;
# cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
# cv2.RETR_TREE 建立一个等级树结构的轮廓。
#
# 参数3: 轮廓的近似办法.
# cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
# cv2.CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
# cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法
# 注:opencv2返回两个值:contours:hierarchy。opencv3会返回三个值,分别是img, countours, hierarchy
#
#返回值
#cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。
来源:https://blog.csdn.net/liupeng521521/article/details/120070878


猜你喜欢
- 问题背景我创建了一个函数,里面包含了一个获取当前执行文件路径的代码current_path = os.path.dirname(os.pat
- 条件判断计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if
- 当我们想复制两个一模一样的列表时,我们可能使用到list.copy()这个方法,这个方法可以让我们复制一个相同的数组,当遇到下面这种情况时,
- 这篇文章主要介绍了python使用配置文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 本文实例为大家分享了python绘制散点图和折线图的具体代码,供大家参考,具体内容如下#散点图,一般和相关分析、回归分析结合使用import
- 前言最近在搞标准化巡检平台,通过 MySQL 的元数据分析一些潜在的问题。冗余索引也是一个非常重要的巡检目,表中索引过多,会导致表空间占用较
- 本文实例为大家分享了wxPython电子表格功能的具体代码,供大家参考,具体内容如下#!/usr/bin/env python#encodi
- 1 九九乘法表for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j
- 前言在启动 Django 项目时,Django 默认监听的端口号为 8000,设置的默认 IP 地址为 127.0.0.1 。如果需要修改默
- 准备工作(接上篇文章的示例也可以):1. 在index.js文件中引入任一js文件import sum from './sum
- 本文实例讲述了Python3.5面向对象编程。分享给大家供大家参考,具体如下:1、面向过程与面向对象的比较(1)面向过程编程(procedu
- python导出chrome书签到markdown文件,主要就是解析chrome的bookmarks文件,然后拼接成markdown格式的字
- 将数据库中的信息存储至XML文件中:save.asp<!-- #include file="adovbs
- 目录前言环境依赖代码前言本文主要分享一个可以将图片或者视频模糊化的工具代码。技术路线主要是使用ffmpeg滤镜。环境依赖ffmpeg环境部署
- AutoGrad 是一个老少皆宜的 Python 梯度计算模块。对于初高中生而言,它可以用来轻易计算一条曲线在任意一个点上的斜率。对于大学生
- 解决案例一:今天公司服务器上所有的网站都出现问题,有的打开没有数据,有的直接是空白。我的第一反应就是数据库挂了。打开远程,进了系统,serv
- 1. 介绍上传的图片文件:如pic = request.FILES["picture"]# pic是 <class
- 如下所示:lists = ['tom','Jack','luCy','lily
- 在神经网络入门回顾(感知器、多层感知器)中整理了关于感知器和多层感知器的理论,这里实现关于与门、与非门、或门、异或门的代码,以便对感知器有更
- 本文实例为大家分享了vue实现轮播图帧率播放的具体代码,供大家参考,具体内容如下需求传入一个数组,数组中放的是目录名称,通过本目录名称,读取