Python+Opencv实现物体尺寸测量的方法详解

yizhihongxing

当使用Python和OpenCV进行物体尺寸测量时,我们可以使用以下步骤:

1.读取图像

我们可以使用OpenCV中的cv2.imread()函数来读取图像。该函数接受图像的路径作为参数并返回图像的像素矩阵。示例代码如下:

import cv2

img_path = "example.jpg"
img = cv2.imread(img_path)

2.预处理图像

在测量物体尺寸之前,我们需要对图像进行一些预处理。这通常包括缩放、滤波和阈值化等操作。以下是一些常用的预处理技术:

2.1 缩放

缩放可以通过调整图像的大小来获取更精确的尺寸测量结果。可以使用cv2.resize()函数实现缩放。示例代码如下:

scale_percent = 50  # 缩放比例百分比
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)

# 缩放图像
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)

2.2 滤波

滤波可以去除图像中的噪声。可以使用各种滤波器,例如中值滤波器、高斯滤波器和均值滤波器。以下是使用高斯滤波器进行滤波的示例代码:

# 高斯滤波器
blur = cv2.GaussianBlur(resized, (5,5), 0)

2.3 阈值化

阈值化可以将图像转换为二进制形式,这有助于更准确地检测物体的轮廓。可以使用cv2.threshold()函数实现阈值化。示例代码如下:

gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)  # 将图像转换为灰度图像

# 二值化图像
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

3.检测物体轮廓

通过在二值化图像上查找轮廓,我们可以检测出物体的形状并计算它的尺寸。可以使用cv2.findContours()函数来查找轮廓。示例如下:

# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
contour_img = cv2.drawContours(resized, contours, -1, (0,255,0), 3)

4.计算物体尺寸

计算物体的尺寸需要测量物体的宽度和高度。可以使用cv2.boundingRect()函数获取物体的外接矩形,然后计算它的宽度和高度。示例如下:

# 计算物体尺寸
for c in contours:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(resized,(x,y),(x+w,y+h),(0,255,0),2)
    print("物体尺寸 (宽度 x 高度):", w, "x", h)

以上就是使用Python和OpenCV进行物体尺寸测量的主要步骤。下面给出两个完整的示例说明。

示例一:使用摄像头进行物体尺寸测量

import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)

while True:
    # 读取图像
    ret, img = cap.read()

    # 缩放图像
    scale_percent = 50
    width = int(img.shape[1] * scale_percent / 100)
    height = int(img.shape[0] * scale_percent / 100)
    dim = (width, height)
    resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)

    # 滤波和阈值化
    gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (5,5), 0)
    ret,thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

    # 查找轮廓
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 计算物体尺寸
    for c in contours:
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(resized,(x,y),(x+w,y+h),(0,255,0),2)
        print("物体尺寸 (宽度 x 高度):", w, "x", h)

    # 显示图像
    cv2.imshow("Image", resized)

    # 按下q键退出
    if cv2.waitKey(1) == ord('q'):
        break

# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()

示例二:使用静态图像进行物体尺寸测量

import cv2

# 读取图像
img_path = "example.jpg"
img = cv2.imread(img_path)

# 缩放图像
scale_percent = 50
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)

# 滤波和阈值化
gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
ret, thresh = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY)

# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 计算物体尺寸
for c in contours:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(resized,(x,y),(x+w,y+h),(0,255,0),2)
    print("物体尺寸 (宽度 x 高度):", w, "x", h)

# 显示图像
cv2.imshow("Image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上就是使用Python和OpenCV进行物体尺寸测量的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+Opencv实现物体尺寸测量的方法详解 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python matplotlib 画dataframe的时间序列图实例

    下面是详细讲解“python matplotlib 画dataframe的时间序列图实例”的完整攻略: 1. 准备工作 首先,需要安装matplotlib和pandas两个库,可以使用pip进行安装: pip install matplotlib pandas 同时,还需要准备一个时间序列的数据集(比如股票价格、气象数据等)来进行绘图。这里我们以一个包含两列…

    python 2023年5月18日
    00
  • python3格式化字符串 f-string的高级用法(推荐)

    让我们来详细讲解一下Python 3中格式化字符串f-string的高级用法。 格式化字符串f-string的基本用法 首先,我们来回顾一下格式化字符串f-string的基本用法。 在Python 3中,我们可以使用f-string来进行字符串格式化,它的语法格式非常简单,使用一对花括号{}来代表要格式化的变量或者表达式,然后在前面加上字母f,例如: nam…

    python 2023年6月5日
    00
  • python只需30行代码就能记录键盘的一举一动

    下面是关于如何使用Python记录键盘的一举一动的完整攻略: 准备工作 在使用Python记录键盘的一举一动之前,我们需要安装一个名为pynput的第三方库。我们可以通过运行以下命令来安装: pip install pynput 这将会在我们的Python环境中安装pynput库。 示例代码 以下是一份示例代码,可以记录所有按键和鼠标操作,并将它们输出到控制…

    python 2023年6月6日
    00
  • Django之创建引擎索引报错及解决详解

    下面就为大家详细讲解” Django之创建引擎索引报错及解决详解 “的完整攻略。 问题概述 在Django项目中,当我们使用Django内置的search引擎来创建索引时,可能会遇到以下报错提示: django.core.exceptions.ImproperlyConfigured: Error loading interface c:…\solr\b…

    python 2023年5月13日
    00
  • Python实现类继承实例

    下面是详细讲解“Python实现类继承实例”的攻略: 一、类继承 在Python中,类继承是实现代码重用和抽象的重要手段。类继承允许一个子类(派生类)继承另一个父类(基类)的所有属性和方法,并且允许在子类中添加新的属性和方法。 以下是一个简单的类继承示例: class Animal: def __init__(self, name, color): self…

    python 2023年6月3日
    00
  • Python中“虽然不是EOF”的完美对应物是什么

    【问题标题】:What is the perfect counterpart in Python for “while not EOF”Python中“虽然不是EOF”的完美对应物是什么 【发布时间】:2023-04-07 23:41:01 【问题描述】: 要读取一些文本文件,在 C 或 Pascal 中,我总是使用以下 sn-ps 来读取数据,直到 EOF…

    Python开发 2023年4月8日
    00
  • Python二分查找+字符串模板+textwrap模块,

    Python二分查找+字符串模板+textwrap模块 是一种常用的解决文本处理问题的方法。以下是该方法的详细解释和示例: Python二分查找: 在计算机科学中,二分查找(英语:binary search),也称折半查找(英语:half-interval search)、对数查找(英语:logarithmic search),是一种在有序数组中查找某一特定…

    python 2023年6月5日
    00
  • 使用python把Excel中的数据在页面中可视化

    下面是使用Python将Excel数据可视化的完整实例教程,包含两个示例说明。 简介 在Python中,我们可以使用pandas和matplotlib库将Excel数据转化为图表,并在网页中展示。具体来说,我们需要使用以下步骤: 加载Excel文件,并将其转化为pandas数据框 对数据框进行数据分析、数据预处理等操作 使用matplotlib库进行可视化,…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部