【python】图像边缘检测

一、代码

import pyautogui
import cv2
import numpy as np
import time
import os
# 获取屏幕尺寸
screen_width, screen_height = pyautogui.size()
screen_size = (1920, 1080)
# cv2.namedWindow("Screen Capture", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Screen Capture", screen_size // 2, screen_size // 2)
threshold1 = 24
threshold2 = 40
thickness = 1
image = cv2.imread('image.jpg')

# 将截图转换为OpenCV图像格式
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# 在这里进行OpenCV图像处理和分析
# ...
edges = cv2.Canny(gray, threshold1, threshold2,300)
contours, hierarchy = cv2.findContours(
    edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

result = np.zeros_like(image)
cv2.drawContours(result, contours, -1, (255, 255, 255), thickness)
cv2.imshow('Result', result)
cv2.waitKey(0)
# cv2.rectangle(image, (x, y), (x + width, y + height), (0, 0, 255), 2)
# 显示图像
# cv2.imshow("Screen Capture", image)
cv2.destroyAllWindows()

二、介绍

1. 导入所需的库:

import pyautogui
import cv2
import numpy as np
import time
import os

2. 读取图像:

image = cv2.imread('image.jpg')

3. 将图像转换为灰度图像:

gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

4. 对图像进行边缘检测:

threshold1 = 24
threshold2 = 40
thickness = 1
edges = cv2.Canny(gray, threshold1, threshold2,300)

cv2.Canny是OpenCV库中的一个函数,用于进行边缘检测。它采用Canny边缘检测算法,该算法是一种经典的边缘检测方法,能够有效地检测图像中的边缘。

该函数的语法如下:
edges = cv2.Canny(image, threshold1, threshold2, apertureSize, L2gradient)

参数说明:
- image:要进行边缘检测的输入图像,通常为灰度图像。
- threshold1:第一个阈值,用于边缘强度的低阈值。
- threshold2:第二个阈值,用于边缘强度的高阈值。
- apertureSize:Sobel算子的孔径大小,默认为3。
- L2gradient:一个布尔值,指定计算梯度幅值的方法。如果为True,则使用更精确但更慢的L2范数计算方法;如果为False,则使用默认的L1范数计算方法。

cv2.Canny函数会返回一个包含边缘像素的二值图像,其中边缘像素被设置为白色(255),非边缘像素被设置为黑色(0)。

5. 对边缘图像进行轮廓提取:

contours, hierarchy = cv2.findContours(
    edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

cv2.findContours是OpenCV库中的一个函数,用于在二值图像中查找轮廓。

该函数的语法如下:

contours, hierarchy = cv2.findContours(image, mode, method)

参数说明:

参数image是输入的二值图像,mode是轮廓检索模式,method是轮廓近似方法。函数返回两个值,contours是一个包含所有轮廓的列表,每个轮廓都是一个点集的数组;hierarchy是轮廓的层级信息。

6. 创建一个空白图像作为结果:

result = np.zeros_like(image)

7. 绘制轮廓到结果图像上:

thickness = 1
cv2.drawContours(result, contours, -1, (255, 255, 255), thickness)

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

该函数的语法如下:
cv2.drawContours(image, contours, contourIdx, color, thickness)

参数说明:
- image:要绘制轮廓的图像。
- contours:包含轮廓信息的列表。
- contourIdx:要绘制的轮廓的索引。如果为负数,则绘制所有轮廓。
- color:绘制轮廓的颜色。
- thickness:轮廓线的粗细。

绘制轮廓的过程是通过连接轮廓上的点来实现的。轮廓是由一系列点组成的闭合曲线。

8. 显示结果图像:

cv2.imshow('Result', result)
cv2.waitKey(0)
# cv2.rectangle(image, (x, y), (x + width, y + height), (0, 0, 255), 2)
# 显示图像
# cv2.imshow("Screen Capture", image)
cv2.destroyAllWindows()

三、效果

 四、总结

在提取图像边缘时,对阈值进行调参比较繁琐,提供如下几种方式:

1. 观察图像直方图:通过观察图像的直方图,可以了解到边缘和背景的灰度分布情况。根据直方图的形状,可以选择适当的阈值。

2. 使用自适应阈值:自适应阈值方法可以根据图像的局部特征来确定阈值。常见的自适应阈值方法有Otsu算法和局部自适应阈值算法。

3. 利用先验知识:根据对待检测对象的了解,可以根据其特征选择合适的阈值。例如,如果待检测对象的边缘明显且对比度高,可以选择较低的阈值。

4. 试错法:可以尝试不同的阈值参数,并观察结果。根据观察到的边缘检测效果,逐步调整阈值参数,直到达到满意的结果。

5. 使用评价指标:可以使用一些评价指标来评估边缘检测结果的好坏,例如精确度、召回率等。根据评价指标的结果,选择合适的阈值参数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jetbrains全家桶历史版本下载(IDEA/PyCharm...)

IDEA: 其他版本 - IntelliJ IDEA (jetbrains.com)https://www.jetbrains.com/zh-cn/idea/download/other.html PyCharm: 其他版本 - PyCharm (jetbrains.com)https://www.jetbrains.com/zh-cn/pycharm/download/other.html Goland: 其他版本 - GoLand (jetbrain…

OpenHarmony4.0源码解析之媒体框架

媒体框架简介 媒体框架 multimedia_player_framework 主要提供音视频的录制与播放功能。 框架简介 从框架图中可以看出,媒体框架的主要工作模式为通过 Gstreamer 的插件自动化注册及插件组合功能,将其余媒体播放相关的框架功能插件化,配合 …

MAC M1版IDEA热部署JRebel

1、在idea里面安装jrebel插件 2、下载激活工具:ReverseProxy_darwin_amd64 下载地址(Mac早期用户使用Safari下载,不要用Chrome,否则下载之后会把.dms后缀名去掉) 特别注意:M1用户请使用下面的下载&#xff…

基于Vue的宠物领养系统的设计与实现(论文+源码)_kaic

目 录 摘 要 ABSTRACT 1 引言 1.1 课题背景 1.2 设计原则 1.3 论文组织结构 2 系统关键技术 2.1 JSP技术 2.2 JAVA技术 2.3 B/S结构 2.4 MYSQL数据库 3 系统分析 3.1 可行性分析 3.1.1 操作可行性 3.1.2 经济可行性 3.1.3 技术可行性 3.1.4 法律可行性 3.2 系统功能分析 3.3…

RabbitMQ消息模型之Simple消息模型

simple消息模型 生产者 package com.example.demo02.mq.simple;import com.example.demo02.mq.util.ConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;import java.io.IOException;/*** author Allen* 4/10/2024 8:07 PM* versi…

C语言 | Leetcode C语言题解之第21题合并两个有序链表

题目: 题解: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {/…

最新Android Studio导入aar包的方法

以前的方式,目前看网上也大多数都是这种方式,导致我本地加的时候一直有问题 但是这样都无法sync以及编译通过,因为方式已经变了 1:将aar文件复制到MyApplication\app\libs下 2:在MyApplication\app\build.gradle下添加…

JS-28-AJAX

一、AJAX的定义 AJAX不是JavaScript的规范,它只是一个哥们“发明”的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求。 如果仔细观察一个Form的提交,你就会发现,一旦用户点击“Submit”…

瀑布流布局

瀑布流布局:瀑布流,又称瀑布流式布局,是比较流行的一种页面布局,视觉表现为参差不齐的多栏布局。 问题概述: 一次性生成,不需要再次增加,排序顺序由上倒下,由左到右 解决方案: //…

渗透测试实战——第一站

仅供交流学习使用,请勿用于非法用途 前言:刚学了sql注入,只听理论总感觉没啥用,今天花了一半个多小时,去尝试寻找有漏洞的网站,最终找到了一个;实践是检验真理的唯一标准。 我是通过黑客常用语法…

基于springboot+vue实现的艺术水平考级报名管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

算法题解记录8+++爬楼梯(百日筑基)

题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶…

贪心算法:排列算式

题目描述 给出n数字,对于这些数字是否存在一种计算顺序,使得计算过程中数字不会超过3也不会小于0? 输入描述: 首行给出一个正整数t,(1≤t≤1000)代表测试数据组数每组测试数据第一行一个正整数n,(1≤n≤500)第二行包含n个以空格分隔的数字…

Python+Appium自动化测试(ios+Android)

一、软件安装 安装清单: JDKPythonnode.jsandroid-sdk(作者通过Android Studio安装)iOS-deploybrewlibimobiledevice依赖库ideviceinstallercarthage依赖库 appium-doctor(安装后可在命令行中通过命令:appium-doctor检查还少啥) WebDriverAg…

ClickHouse--17--聚合函数总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 环境1.创建clickhouse表2.插入数据 函数(1)count:计算行数(2)min:计算最小值(3)max:计算最大值(4)sum:计算总和&…

基于SpringBoot和Vue的企业客户管理系统

今天要和大家聊的是基于SpringBoot和Vue的企业客户管理系统 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕💕个人简介…

2024年认证杯A题保暖纤维的保暖能力完整思路代码论文讲解与分析

保暖纤维的保暖能力建模 摘要 本文针对保暖纤维的保暖能力建模问题进行了深入研究。首先,文章指出现有的一些保暖性能指标,如热导率、热阻值、CLO值等,存在一些局限性,无法全面反映保暖材料的实际保暖性能。因此,本文提出了建立一个更加完善的保暖能力评价指标体系,包括热传导…

MySQL进阶一

目录 1.使用环境 2.条件判断 2.1.case when 2.2.if 3.窗口函数 3.1.排序函数 3.2.聚合函数 ​​​​​​​3.3.partiton by ​​​​​​​3.4.order by 4.待续 1.使用环境 数据库:MySQL 8.0.30 客户端:Navicat 15.0.12 2.条件判断 2.1.ca…

AWS游戏全球智能翻译,助力企业出海

随着全球数字化时代的到来,游戏行业已经成为跨越国界、语言和文化的强大力量。然而,要将游戏产品成功推向全球市场并确保用户体验的流畅与愉悦,语言障碍却是一道不可忽视的挑战。在这个多元化的世界中,如何解决语言障碍&#xff0…

视频知识整理

1 视频播放器原理 视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤: 解协议:将流媒体协议的数据,解析为标准的相应的封装格式数据 解封装:将封装格式的数据,分离成为音频流压缩编码数据和视…