opencv常用API记录(python版)

news2024/11/26 2:34:30

文章目录

    • 1. cv2.minAreaRect
    • 2. cv2.boxPoints()
    • 3. cv2.drawContours()
    • 4. cv2.GaussianBlur
    • 5. cv2.Laplacian

1. cv2.minAreaRect

函数cv2.minAreaRect()是OpenCV中用于计算最小外接矩形的函数。它可以根据给定的轮廓点集,计算出一个包围该轮廓的最小外接矩形。

以下是cv2.minAreaRect()函数的基本用法和参数说明:

rect = cv2.minAreaRect(points)

参数解释:

  • points:包含轮廓点集的数组或矩阵。每个点可以表示为(x, y)的二维坐标。
  • rect:返回的最小外接矩形,是一个(center(x, y), (width, height), angle)的元组。其中,center表示矩形中心点的坐标,(width, height)表示矩形的宽度和高度,angle表示矩形的倾斜角度(逆时针方向为正)。

下面是一个简单的示例,演示了如何使用cv2.minAreaRect()函数计算轮廓的最小外接矩形:

import cv2

# 读取图像并转换为灰度图像
image = cv2.imread('your_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用阈值化或其他方法得到轮廓
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 获取最小外接矩形
rect = cv2.minAreaRect(contours[0])

# 绘制最小外接矩形
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(image, [box], 0, (0, 255, 0), 2)

# 显示图像
cv2.imshow('Min Area Rectangle', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述示例中,我们首先将图像转换为灰度图像,并使用阈值化操作、边缘检测等方法获取轮廓。然后,通过调用cv2.minAreaRect()函数来计算最小外接矩形。接着,使用cv2.boxPoints()函数将最小外接矩形转换为顶点坐标,并使用cv2.drawContours()函数绘制该矩形的边界框。最后,显示带有绘制矩形的图像。

4.8.0.74版本举例:

在这里插入图片描述

2. cv2.boxPoints()

cv2.boxPoints()是OpenCV中的一个函数,用于计算给定旋转矩形的顶点坐标。旋转矩形是一个矩形,可以在图像中进行旋转。cv2.boxPoints()函数接受一个表示旋转矩形的参数,并返回一个四个顶点坐标的NumPy数组。

函数原型如下:

points = cv2.boxPoints(box)

其中,box是表示旋转矩形的参数,它可以是一个元组或一个包含4个浮点数的数组,表示旋转矩形的中心点坐标、宽度、高度和旋转角度。

cv2.boxPoints()函数返回一个形状为(4, 2)的NumPy数组,其中每一行表示一个顶点的坐标。

以下是一个示例,演示如何使用cv2.boxPoints()函数计算旋转矩形的顶点坐标:

import cv2

# 创建一个旋转矩形
rect = ((100, 100), (200, 100), 30)  # 格式为((中心点坐标), (宽度, 高度), 旋转角度)

# 计算顶点坐标
points = cv2.boxPoints(rect)

print(points)

在示例中,我们创建了一个旋转矩形rect,其中旋转角度为30度。然后调用cv2.boxPoints()函数计算旋转矩形的顶点坐标,并将结果存储在points中。最后,我们打印出顶点坐标。

运行代码后,你将得到一个形状为(4, 2)的NumPy数组,其中每一行表示旋转矩形的一个顶点的坐标。

注意:返回的坐标顺序是不确定的。

3. cv2.drawContours()

函数cv2.drawContours()是OpenCV中用于绘制轮廓的函数之一。它可以在图像上绘制指定的轮廓,用于可视化和分析图像中的对象边界。

以下是cv2.drawContours()函数的基本用法和参数说明:

image = cv2.drawContours(image, contours, contourIdx, color, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]])

参数解释:

  • image:用于绘制轮廓的输入图像。
  • contours:包含所有轮廓的列表。每个轮廓是一个由点组成的数组。
  • contourIdx:表示要绘制的轮廓索引,-1表示绘制所有轮廓。
  • color:绘制轮廓的颜色,可以是一个RGB元组或整数值。例如,(0, 255, 0)表示绿色轮廓。
  • thickness:绘制轮廓的线条宽度,为正整数。使用-1表示填充轮廓内部。
  • lineType(可选):指定绘制线条的类型,默认为8连接线。可以使用cv2.LINE_AA来绘制抗锯齿线条。
  • hierarchy(可选):用于轮廓的层次结构信息。通常在查找轮廓时会返回。如果不需要轮廓层次信息,可以忽略。
  • maxLevel(可选):绘制轮廓的最大层级,如果设置为0,则绘制所有层级的轮廓。默认值为0。
  • offset(可选):绘制轮廓的偏移量,用于对轮廓进行平移。默认情况下为(0, 0)

示例使用方法如下:

import cv2
import numpy as np

# 读取图像并转换为灰度图像
image = cv2.imread('your_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用阈值化或其他方法得到轮廓
_, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

# 显示图像
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述示例中,我们首先将图像转换为灰度图像,然后使用阈值化操作、边缘检测等方法得到轮廓。接下来,使用cv2.drawContours()函数绘制图像中的轮廓,并将其显示出来。通过调整参数,如轮廓索引、颜色、线条宽度等,可以对绘制的轮廓进行不同样式的定制。

4. cv2.GaussianBlur

cv2.GaussianBlur()是OpenCV中的一个函数,用于对图像进行高斯模糊处理。高斯模糊是一种常用的图像平滑滤波方法,它利用高斯函数对图像进行加权平均,降低图像的噪声和细节。

函数原型如下:

blurred_image = cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

参数说明:

  • src:输入图像,可以是单通道或多通道图像(8位无符号或浮点型)。
  • ksize:高斯核的大小,指定为ksize=(width, height),width和height必须是奇数且大于0。它表示在X和Y方向上的高斯核大小。
  • sigmaX:在X方向上的高斯核标准差。
  • dst:可选参数,输出图像。
  • sigmaY:可选参数,在Y方向上的高斯核标准差,如果未指定,则默认与sigmaX相等。
  • borderType:可选参数,用于处理边界的插值方法,默认为cv2.BORDER_DEFAULT

以下是一个示例,演示如何使用cv2.GaussianBlur()函数对图像进行高斯模糊处理:

import cv2

# 读取图像
image = cv2.imread('image.jpg')

# 高斯模糊处理
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

# 显示原始图像和模糊处理后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在示例中,我们首先使用cv2.imread()函数读取一张图像。然后,我们使用cv2.GaussianBlur()函数对图像进行高斯模糊处理,指定了高斯核大小(5, 5)和标准差0。最后,我们使用cv2.imshow()函数显示原始图像和模糊处理后的图像。

运行代码后,你将看到显示了原始图像和经过高斯模糊处理后的图像。模糊处理后的图像会减少噪声,并使图像变得更加平滑。

5. cv2.Laplacian

cv2.Laplacian()是OpenCV中的一个函数,用于对图像进行Laplacian滤波处理,以检测图像中的边缘。Laplacian滤波器是一种二阶微分滤波器,它对图像的二阶导数进行计算,从而凸显出图像中的边缘或颜色变化区域。

函数原型如下:

dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])

参数说明:

  • src:输入图像,一般为灰度图像(单通道图像)。
  • ddepth:输出图像的深度,可以是cv2.CV_64F-1(表示与输入图像的深度相同)。
  • dst:可选参数,输出图像。
  • ksize:可选参数,Laplacian滤波器的孔径大小,必须为一个奇数。如果忽略该参数,默认使用3x3的孔径。
  • scale:可选参数,可选参数,将计算结果进行缩放的比例因子,默认为1。
  • delta:可选参数,将计算结果进行平移的数值,默认为0。
  • borderType:可选参数,用于处理边界的插值方法,默认为cv2.BORDER_DEFAULT

以下是一个示例,演示如何使用cv2.Laplacian()函数对图像进行Laplacian滤波处理:

import cv2
import numpy as np

# 读取灰度图像
image_gray = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 使用Laplacian滤波器处理图像
laplacian = cv2.Laplacian(image_gray, cv2.CV_64F)

# 将结果取绝对值并转换为8位无符号整数类型
laplacian = np.uint8(np.absolute(laplacian))

# 显示原始图像和Laplacian滤波器处理后的图像
cv2.imshow('Original Image', image_gray)
cv2.imshow('Laplacian Filter', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()

在示例中,我们首先使用cv2.imread()函数读取一张图像,并将其转换为灰度图像。然后,我们使用cv2.Laplacian()函数对灰度图像进行Laplacian滤波处理,指定了输出图像的深度cv2.CV_64F。接下来,我们将结果取绝对值,转换为8位无符号整数类型(np.uint8)。最后,我们使用cv2.imshow()函数显示原始图像和经过Laplacian滤波处理后的图像。

运行代码后,你将看到显示了原始灰度图像和经过Laplacian滤波处理后的图像,边缘或颜色变化区域会变得更加明显。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka查看消息两种方式(命令行和软件)

1、命令行方式 ①找到kafka安装文件夹 ②执行命令 #指定offset为指定时间作为消息起始位置 kafka-consumer-groups.sh \ --bootstrap-server 20.2.246.116:9092 \ --group group_1 \ --topic lanxin_qiao \ --reset-offsets \ --to-datetime 2023-07-19T01:00:00.000 \ -exe…

【C++进阶之路】适配器、反向迭代器、仿函数

文章目录 前言一、适配器①模拟实现栈②模拟实现对列 二、反向迭代器三、仿函数总结 前言 我们先来笼统的介绍一下今天的三个内容。 适配器——简单的理解就是复用,用已经实现的轮子,来继续实现某种功能。 反向迭代器——原理很简单,就是对…

Openlayers实战:setCenter,setZoom设置跳转

Openlayers开发的项目中,经常会重新设定一个zoom,也会重新跳转到一个中心点。 所用的方法就是setZoom和setCenter。在Openlayers实战中,我们做一个简单的设置,来很好的认识一下这个常用的方法。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特…

Vue3组合式API+TypeScript写法入门

文章目录 前言1.reactive2.ref3.props4.computed5.emit6.watch总结 前言 参考Vue3官网. 本篇以组合式API为例, 但不包含setup语法糖式写法. 原本打算结合class-component, Vue3不推荐就不用了: OverView|Vue Class Component. 而且是不再推荐基于类的组件写法, 推荐单文件组件…

电脑硬盘指的是什么?电脑硬盘长什么样子呢

在很早之前就听说过电脑里面有硬盘,但是不知道电脑硬盘是什么样子,本章文章结合硬盘的接口类型,以及应用技术,说说与硬盘样式有关的知识 一。机械硬盘 如果从硬盘的应用技术来区分硬盘,一般分为两种,早些年…

Leetcode周赛 | 2023-7-23

2023-7-23 题1体会我的代码 题2我的代码 题3体会我的代码 题1 体会 01背包啊。01背包啊!怎么能一直往回溯上想!还是对动态规划太不熟悉了!这不就是01背包吗?还要别人提示才知道。 我的代码 class Solution:def numberOfWays(se…

设计模式再探——状态模式

目录 一、背景介绍二、思路&方案三、过程1.状态模式简介2.状态模式的类图3.状态模式代码4.状态模式还可以优化的地方5.状态模式的项目实战,优化后 四、总结五、升华 一、背景介绍 最近产品中有这样的业务需求,不同时间(这里不是活动的执行时间&…

Spring 统一登录验证、数据格式返回、异常处理的实现

文章目录 spring统一功能实现前言1. 统一用户登录权限验证1.1 传统实现方式1.2 Spring AOP用户统一登录验证1.2.1 Spring 拦截器 2. 统一数据格式返回3. 统一异常处理 spring统一功能实现 前言 在上一篇博客我们介绍了Spring AOP以及简单使用了Spring AOP,这篇博客…

力扣 -- 122. 买卖股票的最佳时机 II

一、题目: 题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode) 二、解题步骤 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码: clas…

【数据可视化】基于Python和Echarts的中国经济发展与人口变化可视化大屏

1.题目要求 本次课程设计要求使用Python和ECharts实现数据可视化大屏。要求每个人的数据集不同,用ECharts制作Dashboard(总共至少4图),要求输入查询项(地点和时间)可查询数据,查询的数据的地理…

工业的相机与镜头(简单选型)

面阵相机,需要多大的分辨率?多少帧数? 前提条件: 1.被检测的物体大小 2.要求检测的精度是多少 3.物体是否在运动过程中进行检测,速度是多少 线阵相机选择(分辨率、扫描行数) 行频:每秒扫描多少行&#xf…

【GitOps系列】使用Kustomize和Helm定义应用配置

文章目录 使用 Kustomize 定义应用改造示例应用1.创建基准和多环境目录2.环境差异分析3.为 Base 目录创建通用 Manifest4.为开发环境目录创建差异 Manifest5.为预发布环境创建差异 Manifest6.为生产环境创建差异 Manifest 部署 Kustomize 应用部署到开发环境部署到生产环境 使用…

Python 逻辑回归:理论与实践

文章目录 1. 介绍1.1 什么是逻辑回归?1.2 逻辑回归的应用领域 2. 逻辑回归的原理2.1 Sigmoid 函数2.2 决策边界2.3 损失函数 3. 逻辑回归的实现3.1 数据准备3.2 创建逻辑回归模型3.3 模型训练3.4 模型预测3.5 模型评估 4. 可视化决策边界4.1 绘制散点图4.2 绘制决策…

《零基础入门学习Python》第056讲:论一只爬虫的自我修养4:网络爬图

今天我们结合前面学习的知识,进行一个实例,从网络上下载图片,话说我们平时闲来无事会上煎蛋网看看新鲜事,那么,熟悉煎蛋网的朋友一定知道,这里有一个 随手拍 的栏目,我们今天就来写一个爬虫&…

实验三 贪心算法

实验三 贪心算法 迪杰斯特拉的贪心算法实现 优先队列等 1.实验目的 1、掌握贪心算法的基本要素 :最优子结构性质和贪心选择性质 2、应用优先队列求单源顶点的最短路径Dijkstra算法,掌握贪心算法。 2.实验环境 Java 3.问题描述 给定带权有向图G (V…

前端对后端路径的下载//流文件下载

1.前端对后端路径的下载 2.流文件下载

25 MFC 数据库

文章目录 导入ADO库 导入ADO库 #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")void CADODlg::OnBnClickedBtnQuery() {//导入ADO库::CoInitialize(NULL);//初始化COM库_ConnectionPtr pCo…

OpenCv之人脸操作

目录 一、马赛克实现 二、人脸马赛克 三、人脸检测 四、多张人脸检测 一、马赛克实现 案例代码如下: import cv2 import numpy as npimg cv2.imread(8.jpg) # 马赛克方式一:缩小图片 # img2 cv2.resize(img,(600,400)) # # 马赛克方式二: # img2 cv2.resize(img,(600,4…

《中国算力服务研究报告(2023年)》发布在即

2023年,中共中央 国务院印发《数字中国建设整体布局规划》,强调“系统优化算力基础设施布局,促进东西部算力高效互补和协同联动。”算力服务涵盖支撑东西部算力高效联通的关键技术,在国家政策引导下,我国算力服务产业发…

SpringCloudAlibaba微服务实战系列(一)Nacos服务注册发现

SpringCloudAlibaba微服务实战系列(一)Nacos服务注册发现 实战前先做一个背景了解。 单体架构、SOA和微服务 单体架构:近几年技术的飞速发展,各种各样的服务已经进入到网络化。单体架构发布时只需要打成一个war或jar包发布即可&a…