当前位置: 首页 > wzjs >正文

有哪些企业网站做的不错今天的新闻头条

有哪些企业网站做的不错,今天的新闻头条,平面设计平台有哪些,开发一个oa系统多少钱你是否曾好奇计算机是如何“看懂”这个世界的?从人脸识别到自动驾驶,计算机视觉技术正日益渗透到我们的生活中。而 OpenCV (Open Source Computer Vision Library),作为一个强大的开源计算机视觉库,正是我们探索这个奇妙世界的强大…

你是否曾好奇计算机是如何“看懂”这个世界的?从人脸识别到自动驾驶,计算机视觉技术正日益渗透到我们的生活中。而 OpenCV (Open Source Computer Vision Library),作为一个强大的开源计算机视觉库,正是我们探索这个奇妙世界的强大工具。

本文将带你从零开始,一步步走进 Python OpenCV 的世界。我们将用通俗易懂的方式讲解核心概念,并通过实际案例手把手教学,让你轻松掌握图像处理的基本技能。准备好了吗?让我们开始这段激动人心的旅程!

 

 

一、OpenCV 简介与安装

OpenCV 是什么?

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,拥有超过 2500 个优化过的算法。这些算法可以用于检测与识别面部、识别物体、分类人脸、跟踪摄像头上的物体以及很多其他应用。

安装 OpenCV

在使用 OpenCV 前,需要先安装它。通过 pip 安装 OpenCV 非常简单:

pip install opencv-python

安装完成后,你可以通过 import cv2 来调用 OpenCV。

import cv2

二、基本图像读取与展示

首先,我们使用 OpenCV 的 cv2.imread 方法来读取图像,然后使用 cv2.imshow 展示图像。以下代码展示了如何实现这一步骤:

import cv2# 读取图像(注意替换路径为你本地的图像路径)
img = cv2.imread("sample.jpg")# 显示图像
cv2.imshow("原始图像", img)# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.imread("sample.jpg") 读取指定路径的图像文件。

  • cv2.imshow("窗口标题", img) 用于创建一个窗口,并在其中显示加载的图像 img

  • cv2.waitKey(0) 告诉程序等待任意按键,否则窗口会一闪而过,0表示无限等待

  • cv2.destroyAllWindows() 用于关闭所有创建的窗口,也就是我们前面按下任意键,这里会控制关闭所有通过 OpenCV 创建的显示窗口。

三、图像预处理:灰度化与二值化

图像预处理是图像分析中至关重要的一步,常见的操作包括灰度化和二值化。下面分别介绍这两个操作。

灰度化

灰度化可以减少计算量,将彩色图像转换为单通道灰度图像。

在图像处理中,将彩色图像转换为灰度图是一种常见的操作。常见的转换方法有加权平均法,即根据人眼对不同颜色的敏感度不同,对红(R)、绿(G)、蓝(B)三个通道的像素值进行加权平均。在 OpenCV 中,使用 cv2.cvtColor 函数(颜色转换函数)来实现这个转换,它使用的公式大致为:Gray = 0.299 * R + 0.587 * G + 0.114 * B 

代码如下:

import cv2# 读取图像
img = cv2.imread("sample.jpg")# 将图像转换为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 显示灰度图
cv2.imshow("灰度图像", gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

tip:

  • cvtColor 函数中 cvt 是 convert(转换)的缩写,Color 就是 “颜色” 的意思,所以 cvtColor 整体含义就是 “颜色转换” 
  • 参数 cv2.COLOR_BGR2GRAY:将 BGR 颜色空间转换为 GRAY 颜色空间。在 OpenCV 中,默认读取的图像颜色通道顺序是 BGR,而很多其他库(如 matplotlib)使用的是 RGB 顺序

 

二值化

二值化图是一种特殊的图像,它的每个像素只有两种可能的值,通常是 0(黑色)和 255(白色)。二值化图常用于图像分割、特征提取等任务,因为它可以简化图像信息,突出目标物体的轮廓。

threshold 函数名 threshold 是 “阈值” 的意思,这个函数主要用于对图像进行阈值处理,也就是根据设定的阈值将图像的像素值进行分类,从而实现图像的二值化或其他阈值相关的处理。所以 cv2.threshold 整体表达的就是使用 OpenCV 对图像进行阈值操作。

 

import cv2# 读取并转换为灰度图
img = cv2.imread("sample.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
# 参数解释:0为阈值,255为最大值,当像素值大于阈值时取 255,否则取 0
ret, binary_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)# 显示二值图像
cv2.imshow("二值图像", binary_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) 中的阈值设为 127,函数会返回阈值和转换后的图像。 

cv2.THRESH_BINARY 表示简单的二值化处理,即当像素的灰度值大于阈值时,将其设置为第三个参数指定的值(通常是 255);当像素的灰度值小于等于阈值时,将其设置为 0。

 

四、图像边缘检测与轮廓提取

边缘检测是许多图像分析算法的重要环节。OpenCV 提供了 Canny 边缘检测方法。与此同时,我们还介绍如何提取图像中的轮廓。

边缘检测(Canny 算法)

import cv2# 读取并转换为灰度图
img = cv2.imread("sample.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用 Canny 算法进行边缘检测
edges = cv2.Canny(gray_img, 100, 200)# 显示边缘检测结果
cv2.imshow("边缘检测", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.Canny(gray_img, 100, 200) 使用设定的低、高阈值进行边缘检测。 

  • 低阈值和高阈值的选择会对边缘检测的结果产生显著影响。
    • 若两个阈值都设置得较高,可能会遗漏一些较弱的边缘,导致检测到的边缘较少。
    • 若两个阈值都设置得较低,可能会产生较多的虚假边缘,使检测结果包含过多噪声。
    • 通常情况下,高阈值与低阈值的比例为 2:1 或 3:1 时能得到较好的效果。不过,具体的阈值需要根据图像的特点和实际需求进行调整。

 

轮廓提取

基于二值图像,可以提取图像中的轮廓。

import cv2# 读取图像并转换为灰度图,再进行二值化处理
img = cv2.imread("sample.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)# 提取轮廓
contours, hierarchy = cv2.findContours(binary_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 将轮廓绘制在原图上(复制一份图像)
img_contours = img.copy()
cv2.drawContours(img_contours, contours, -1, (0, 255, 0), 2)# 显示结果
cv2.imshow("轮廓检测", img_contours)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

  • cv2.findContours 方法用于检测图像中的轮廓。

  • cv2.drawContours 方法则在图像上绘制出所有轮廓(绿色线条表示)。

五、实例讲解:综合案例演示

下面我们通过一个综合案例来展示从图像读取到边缘检测、再到轮廓提取的完整流程。

import cv2
import numpy as np# 1. 读取图像
img = cv2.imread("sample.jpg")# 2. 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 3. 对灰度图进行 Gaussian 模糊降噪
blurred = cv2.GaussianBlur(gray, (5, 5), 0)# 4. 进行 Canny 边缘检测
edges = cv2.Canny(blurred, 50, 150)# 5. 找出图像轮廓
ret, thresh = cv2.threshold(blurred, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 6. 在原始图像上绘制轮廓
img_contours = img.copy()
cv2.drawContours(img_contours, contours, -1, (0, 255, 0), 2)# 7. 显示所有处理结果
cv2.imshow("原始图像", img)
cv2.imshow("灰度图像", gray)
cv2.imshow("模糊图像", blurred)
cv2.imshow("边缘检测", edges)
cv2.imshow("轮廓绘制", img_contours)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码流程说明:

  1. 读取图像:加载待处理图像。

  2. 灰度化:转换为单通道灰度图便于进一步处理。

  3. 高斯模糊:通过 GaussianBlur 降噪,减少边缘检测时的噪点。

  4. 边缘检测:使用 Canny 算法提取图像的边缘信息。

  5. 二值化与轮廓提取:先对图像二值化,再利用 findContours 提取轮廓。

  6. 绘制轮廓:将提取的轮廓绘制回原图,观察效果。

  7. 展示结果:分别展示每一步的处理效果。

 

总结

恭喜你!通过本文的学习,你已经迈出了 Python OpenCV 计算机视觉之旅的第一步。你学会了如何读取、显示、保存图像,了解了图像的基本属性和像素操作,掌握了图像读取、边缘检测以及灰度转换等基本操作。

这只是 OpenCV 功能的冰山一角。在接下来的学习中,你将探索更多的图像处理技术,如图像滤波、特征提取、目标检测、平移旋转等等。计算机视觉的世界充满了无限的可能,而 OpenCV 将是你探索这个世界的强大助手。

继续你的学习吧!动手实践,探索更多 OpenCV 的功能,你将能够构建出令人惊叹的计算机视觉应用。如果你在学习过程中遇到任何问题,欢迎随时提问和交流。祝你在计算机视觉的道路上越走越远!


希望这篇文章能够帮助你入门 Python OpenCV!记住,实践是最好的老师。尝试用你自己的图片运行这些代码,并尝试修改参数,看看会发生什么。祝你学习愉快!

如果这篇文章对你有所启发,期待你的点赞关注!

 

 

 

http://www.dtcms.com/wzjs/282009.html

相关文章:

  • 做网站如何避免商标侵权绍兴seo网站推广
  • 网站备案填写电话号码查排名的网站
  • 网站设计跟网站开发区别雅思培训班价格一览表
  • 海南网站建设粤icp备官网优化 报价
  • 做外贸需要到外汇管理网站天津疫情最新情况
  • 上海金桥建设监理有限公司网站企业网站建设推广
  • 甘肃网站建设公司大一html网页制作作业简单
  • 重庆公司做网站网络推广外包联系方式
  • cdn如何做网站统计苏州吴中区seo关键词优化排名
  • cvv钓鱼网站怎么做站长工具果冻传媒
  • dede当前位置点击去是其他网站百度推广开户代理商
  • asp.net网站第一次运行慢每日关键词搜索排行
  • 个人怎么做ckmov解析网站优化设计电子课本
  • 建网站淄博竞价开户推广
  • 一个ip怎么做多个网站seo优化网站排名
  • 做标记网站排名第一的助勃药
  • 华为云网站建设中小企业管理培训班
  • 金融公司网站开发费用入什么科目考研培训机构排名前五的机构
  • 乌鲁木齐 发布会推广学院seo教程
  • 手机网站总是自动跳转长沙做网站推广公司咨询
  • 短视频seo优化排名信息流优化师前景
  • 推广网站怎样做百度推广代运营公司
  • wordpress如何改字体深圳优化公司哪家好
  • 武汉专业做网站开发的公司推广普通话奋进新征程演讲稿
  • 临朐网站建设价格全网自媒体平台大全
  • 店铺推广和网站优化一起做网络营销课程感悟
  • 一个域名权重3如果做网站的话权重会降为0吗郑州网络优化实力乐云seo
  • 帝国CMS做的淘客网站网站统计数据分析
  • 两学一做微网站交流it培训机构哪个好
  • 个人网站怎么做微商新闻网站排行榜