Python 物联网入门指南(二)(4)

简介: Python 物联网入门指南(二)

Python 物联网入门指南(二)(3)https://developer.aliyun.com/article/1507160

图像分割

分割是将图像分成不同区域的过程。轮廓是对象边界周围的线条或曲线。本节讨论了使用轮廓进行图像分割。

如何做…

  1. 导入计算机视觉包 - cv2
import cv2 
# Import Numerical Python package - numpy as np 
import numpy as np 
  1. 使用内置的imread函数读取图像:
image = cv2.imread('image_5.jpg') 
  1. 使用内置的imshow函数显示原始图像:
cv2.imshow("Original", image) 
  1. 等待按任意键:
cv2.waitKey(0) 
  1. 执行Canny边缘检测系统:
# cv2.Canny is the built-in function used to detect edges 
# cv2.Canny(image, threshold_1, threshold_2) 
canny = cv2.Canny(image, 50, 200) 
  1. 使用内置的imshow函数显示检测到的边缘输出图像:
cv2.imshow("Canny Edge Detection", canny) 
  1. 等待按任意键:
cv2.waitKey(0)
  1. 执行轮廓检测系统:
# cv2.findContours is the built-in function to find contours 
# cv2.findContours(canny, contour retrieval mode, contour approximation mode) 
# contour retrieval mode: cv2.RETR_LIST (retrieves all contours)  
# contour approximation mode: cv2.CHAIN_APPROX_NONE (stores all boundary points) 
contours, hierarchy = cv2.findContours(canny, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) 
  1. 在图像上勾画轮廓:
# cv2.drawContours is the built-in function to draw contours 
# cv2.drawContours(image, contours, index of contours, color, thickness) 
cv2.drawContours(image, contours, -1, (255,0,0), 10) 
# index of contours = -1 will draw all the contours 
  1. 显示图像的勾画轮廓:
# Display contours using imshow built-in function 
cv2.imshow("Contours", image) 
  1. 等待按任意键:
cv2.waitKey() 
  1. 终止程序并显示结果:
# Close all windows 
cv2.destroyAllWindows() 
  1. 执行Image_Segmentation.py文件后获得的结果如下所示:


以下是边缘检测输出:


模糊和锐化图像

模糊和锐化是用于增强输入图像的图像处理操作。

如何做…

  1. 导入计算机视觉包 - cv2
import cv2 
# Import Numerical Python package - numpy as np 
import numpy as np 
  1. 使用内置的imread函数读取图像:
image = cv2.imread('image_6.jpg') 
  1. 使用内置的imshow函数显示原始图像:
cv2.imshow("Original", image) 
  1. 等待按任意键:
cv2.waitKey(0) 
  1. 执行模糊操作的像素级操作:
# Blurring images: Averaging, cv2.blur built-in function 
# Averaging: Convolving image with normalized box filter 
# Convolution: Mathematical operation on 2 functions which produces third function. 
# Normalized box filter having size 3 x 3 would be: 
# (1/9)  [[1, 1, 1], 
#         [1, 1, 1], 
#         [1, 1, 1]] 
blur = cv2.blur(image,(9,9)) # (9 x 9) filter is used  
  1. 显示模糊的图像:
cv2.imshow('Blurred', blur) 
  1. 等待按任意键:
cv2.waitKey(0)
  1. 执行锐化操作的像素级操作:
# Sharpening images: Emphasizes edges in an image 
kernel = np.array([[-1,-1,-1],  
                   [-1,9,-1],  
                   [-1,-1,-1]]) 
# If we don't normalize to 1, image would be brighter or darker respectively     
# cv2.filter2D is the built-in function used for sharpening images 
# cv2.filter2D(image, ddepth, kernel) 
# ddepth = -1, sharpened images will have same depth as original image 
sharpened = cv2.filter2D(image, -1, kernel) 
  1. 显示锐化后的图像:
cv2.imshow('Sharpened', sharpened) 
  1. 等待按任意键:
cv2.waitKey(0) 
  1. 终止程序执行:
# Close all windows 
cv2.destroyAllWindows() 
  1. 用于执行Blurring_Sharpening.py的命令如下所示:


  1. 用于执行Blurring_Sharpening.py文件的输入图像如下所示:


  1. 执行Blurring_Sharpening.py文件后获得的模糊图像如下所示:


  1. 执行Blurring_Sharpening.py文件后获得的锐化图像如下所示:


在图像中检测边缘

边缘检测用于检测图像中的边界。它提供有关形状和区域属性的详细信息。这包括周长、主轴大小和次轴大小。

如何做…

  1. 导入必要的包:
import sys 
import cv2 
import numpy as np 
  1. 读取输入图像:
in_file = sys.argv[1] 
image = cv2.imread(in_file, cv2.IMREAD_GRAYSCALE) 
  1. 实现 Sobel 边缘检测方案:
horizontal_sobel = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5) 
vertical_sobel = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5) 
laplacian_img = cv2.Laplacian(image, cv2.CV_64F) 
canny_img = cv2.Canny(image, 30, 200) 
  1. 显示输入图像及其对应的输出:
cv2.imshow('Original', image) 
cv2.imshow('horizontal Sobel', horizontal_sobel) 
cv2.imshow('vertical Sobel', vertical_sobel) 
cv2.imshow('Laplacian image', laplacian_img) 
cv2.imshow('Canny image', canny_img) 
  1. 等待操作员的指示:
cv2.waitKey() 
  1. 显示输入图像和相应的结果:
cv2.imshow('Original', image) 
cv2.imshow('horizontal Sobel', horizontal_sobel) 
cv2.imshow('vertical Sobel', vertical_sobel) 
cv2.imshow('Laplacian image', laplacian_img) 
cv2.imshow('Canny image', canny_img) 
  1. 等待操作员的指示:
cv2.waitKey()
  1. 用于执行Detecting_edges.py Python 程序文件的命令,以及输入图像(baby.jpg)如下所示:


  1. 执行Detecting_edges.py文件后获得的输入图像和水平 Sobel 滤波器输出如下所示:


  1. 执行Detecting_edges.py文件后获得的垂直 Sobel 滤波器输出和拉普拉斯图像输出如下所示:


以下是拉普拉斯图像输出:


  1. 执行Detecting_edges.py文件后获得的Canny边缘检测输出如下所示:


它是如何工作的…

读者可以参考以下文档,了解边缘检测是什么,以及它对测试图片的影响:

citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.301.927

另请参见

请参阅以下文档:

直方图均衡化

直方图均衡化用于增强图像的可见性和对比度。它通过改变图像的强度来执行。这些程序在这里有清晰的描述。

如何做…

  1. 导入必要的包:
import sys 
import cv2 
import numpy as np 
  1. 加载输入图像:
in_file = sys.argv[1] 
image = cv2.imread(in_file) 
  1. 将 RGB 图像转换为灰度图像:
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
cv2.imshow('Input grayscale image', image_gray) 
  1. 调整灰度图像的直方图:
image_gray_histoeq = cv2.equalizeHist(image_gray) 
cv2.imshow('Histogram equalized - grayscale image', image_gray_histoeq) 
  1. 调整 RGB 图像的直方图:
image_yuv = cv2.cvtColor(image, cv2.COLOR_BGR2YUV) 
image_yuv[:,:,0] = cv2.equalizeHist(image_yuv[:,:,0]) 
image_histoeq = cv2.cvtColor(image_yuv, cv2.COLOR_YUV2BGR) 
  1. 显示输出图像:
cv2.imshow('Input image', image) 
cv2.imshow('Histogram equalized - color image', image_histoeq) 
cv2.waitKey()
  1. 用于执行histogram.py Python 程序文件的命令,以及输入图像(finger.jpg)如下所示:


  1. 用于执行histogram.py文件的输入图像如下所示:


  1. 执行histogram.py文件后获得的直方图均衡化灰度图像如下所示:


  1. 执行histogram.py文件后获得的直方图均衡化彩色图像如下所示:


在图像中检测角点

角点是图像中用于提取推断图像内容的特殊特征的边界。角点检测经常用于图像配准、视频跟踪、图像拼接、运动检测、3D 建模、全景拼接和物体识别。

如何做…

  1. 导入必要的包:
import sys 
import cv2 
import numpy as np 
  1. 加载输入图像:
in_file = sys.argv[1] 
image = cv2.imread(in_file) 
cv2.imshow('Input image', image) 
image_gray1 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
image_gray2 = np.float32(image_gray1) 
  1. 实现 Harris 角点检测方案:
image_harris1 = cv2.cornerHarris(image_gray2, 7, 5, 0.04) 
  1. 膨胀输入图像并构造角点:
image_harris2 = cv2.dilate(image_harris1, None) 
  1. 实现图像阈值处理:
image[image_harris2 > 0.01 * image_harris2.max()] = [0, 0, 0] 
  1. 显示输入图像:
cv2.imshow('Harris Corners', image) 
  1. 等待操作员的指示:
cv2.waitKey() 
  1. 用于执行Detecting_corner.py Python 程序文件的命令,以及输入图像(box.jpg)如下所示:


  1. 用于执行Detecting_corner.py文件的输入图像如下所示:


  1. 执行Detecting_corner.py文件后获得的 Harris 角点如下所示:


要了解它如何作用于输入图片,请参考以下内容:

  • 图像角点检测涉及在给定图片中找到边缘/角点。它可以用于从灰度和 RGB 图片中提取重要的形状特征。参考这篇关于边缘和角点检测的调查论文:

pdfs.semanticscholar.org/24dd/6c2c08f5601e140aad5b9170e0c7485f6648.pdf

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
2天前
|
数据采集 运维 API
适合所有编程初学者,豆瓣评分8.6的Python入门手册开放下载!
Python是一种跨平台的计算机程序设计语言,它可以用来完成Web开发、数据科学、网络爬虫、自动化运维、嵌入式应用开发、游戏开发和桌面应用开发。 Python上手很容易,基本有其他语言编程经验的人可以在1周内学会Python最基本的内容(PS:没有基础的人也可以直接学习,速度会慢一点) 今天给小伙伴们分享一份Python语言及其应用的手册,这份手册主要介绍 Python 语言的基础知识及其在各个领域的具体应用,基于最新版本 3.x。
|
5天前
|
数据可视化 API Python
Python零基础“圣经”!300W小白从入门到精通首选!
今天分享的这本书在让你尽快学会 Python基础知识的同时,能够编写并正确的运行程序(游戏、数据可视化、Web应用程序) 最大的特色在于,在为初学者构建完整的 Python 语言知识体系的同时,面向实际应用情境编写代码样例,而且许多样例还是 后续实践项目部分的伏笔。实践项目部分的选题经过精心设计,生动详尽 又面面俱到。相信这本书能够得到更多 Python 初学者的喜爱。
|
6天前
|
Python
小白入门必备!计科教授的Python精要参考PDF开放下载!
随着互联网产业的高速发展,在网络上早已积累了极其丰富的Python学习资料,任何人都可以基于这些资源,自学掌握 Python。 但实际上,网络上充斥的资源太多、太杂且不成体系,在没有足够的编程/工程经验之前,仅靠“看”线上资源自学,的确是一件非常困难的事。
|
6天前
|
数据可视化 API Python
豆瓣评分9.4!堪称经典的Python入门圣经,你还没看过吗?
最理想的新人入门书应该满足两个特点:第一就是内容通俗易懂;第二就是要有实战,能够让读者在学完之后知道具体怎么用。 今天给小伙伴们分享的这份Python入门手册,在为初学者构建完整的Python语言知识体系的同时,面向实际应用情境编写代码样例,而且许多样例还是后续实践项目部分的伏笔。实践项目部分的选题经过精心设计,生动详尽又面面俱到。
|
8天前
|
数据采集 运维 API
适合所有编程初学者,豆瓣评分8.6的Python入门手册开放下载!
Python是一种跨平台的计算机程序设计语言,它可以用来完成Web开发、数据科学、网络爬虫、自动化运维、嵌入式应用开发、游戏开发和桌面应用开发。 Python上手很容易,基本有其他语言编程经验的人可以在1周内学会Python最基本的内容(PS:没有基础的人也可以直接学习,速度会慢一点)
|
9天前
|
数据采集 SQL 数据可视化
使用Python和Pandas库进行数据分析的入门指南
使用Python和Pandas库进行数据分析的入门指南
73 0
|
9天前
|
Linux iOS开发 MacOS
Python入门指南
Python入门指南
32 0
|
10天前
|
数据采集 前端开发 JavaScript
Python爬虫入门
网络爬虫是自动抓取网页数据的程序,通过URL获取网页源代码并用正则表达式提取所需信息。反爬机制是网站为防止爬取数据设置的障碍,而反反爬是对这些机制的对策。`robots.txt`文件规定了网站可爬取的数据。基础爬虫示例使用Python的`urllib.request`模块。HTTP协议涉及请求和响应,包括状态码、头部和主体。`Requests`模块是Python中常用的HTTP库,能方便地进行GET和POST请求。POST请求常用于隐式提交表单数据,适用于需要发送复杂数据的情况。
16 1
|
13天前
|
机器学习/深度学习 人工智能 数据可视化
Python编程入门:从零开始探索编程的奇妙世界
这篇教程引导初学者入门Python编程,从安装Python开始,逐步讲解基本语法,如`print()`、变量、条件判断、循环以及自定义函数。文章强调了Python在数据处理、数据分析、人工智能和机器学习等领域的重要性,并鼓励学习者探索Python的广泛应用,开启编程之旅。
|
14天前
|
数据可视化 API Python
Python零基础“圣经”!300W小白从入门到精通首选!
今天分享的这本书在让你尽快学会 Python基础知识的同时,能够编写并正确的运行程序(游戏、数据可视化、Web应用程序) 最大的特色在于,在为初学者构建完整的 Python 语言知识体系的同时,面向实际应用情境编写代码样例,而且许多样例还是 后续实践项目部分的伏笔。实践项目部分的选题经过精心设计,生动详尽 又面面俱到。相信这本书能够得到更多 Python 初学者的喜爱。