网站首页 > 技术文章 正文
1.题目描述
机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。它是一项综合技术,包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术(图像增强和分析算法、图像卡、 I/O卡等)。
而在机器视觉中,一个非常基础的操作就是图像处理,而在图像处理中有一个十分重要的知识就是边缘提取。边缘提取,指数字图像处理中,对于图片轮廓的一个处理。对于边界处,灰度值变化比较剧烈的地方,就定义为边缘。也就是拐点,拐点是指函数发生凹凸性变化的点。和高数的导数有联系,将某个指定的物体的边缘进行提取出来。
本次实验中要用到的边缘提取技术是python+opencv,python是一种很方便的高级编程语言,代码量少,而OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。用python+opencv可以很方便地进行边缘提取操作。从而感受机器视觉技术在现实中的实际应用。
2.实现过程
(1)下载python以及Anaconda开源包,并购配置好环境变量,配置好后在命令台检测python已经安装成功了。
(2)下载opencv_python
opencv_python是open配合python运行的工具,在网站
https://www.lfd.uci.edu/~gohlke/pythonlibs/
上可以选择下载:
这里选择下载opencv_python-4.0.0.21-cp37-cp37m-win_amd64.whl,然后在cmd输入pip install opencv_python-4.0.0.21-cp37-cp37m-win_amd64.whl即可完成opencv和opencv的python环境的安装。
安装成功后如下:
(3) 在sublime配置python
python的编辑器和编译器有很多,这里选择的是用十分简单的sublime,配置好sublime中的python后,先新建一个文件夹,并把需要边缘提取的图片放进去:
(4) 对图像进行阈值分割并反色
首先需要新建一个python文件,导入cv2的库(OpenCV2的python库),并显示一张图片,代码为:
import cv2
# 读取本相对路径下的initial.bmp文件
image = cv2.imread ("initial.bmp")
# 将image对应图像在图像窗口显示出来
cv2.imshow('initial',image)
# waitKey使窗口保持静态直到用户按下一个键
cv2.waitKey(0)
对图像进行阈值分割,阈值设定为80,得到二值化灰度图,代码为:
# 对图像进行阈值分割,阈值设定为80,得到二值化灰度图
ret,image1 = cv2.threshold(image,80,255,cv2.THRESH_BINARY)
cv2.imshow('grayscale',image1)
将图像进行反色,代码如下:
# 将图像进行反色
image2 = image1.copy() # 复制图片
for i in range(0,image1.shape[0]): #image.shape表示图像的尺寸和通道信息(高,宽,通道)
for j in range(0,image1.shape[1]):
image2[i,j]= 255 - image1[i,j]
cv2.imshow('colorReverse',image2)
(5) 边缘提取
下面就是边缘提取了,用findContours差影法或者Canny方法检测边缘,用原图像减去腐蚀后的收缩图像,提取边缘。代码如下:
# 边缘提取
img = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)
canny_img_one = cv2.Canny(img,300,150)
canny_img_two = canny_img_one.copy() # 复制图片
for i in range(0,canny_img_one.shape[0]): #image.shape表示图像的尺寸和通道信息(高,宽,通道)
for j in range(0,canny_img_one.shape[1]):
canny_img_two[i,j]= 255 - canny_img_one[i,j]
cv2.imshow('edge',canny_img_two)
3.运行结果(效果)
图3-1 sublime中opencv显示图片
图3-2 转为灰度图
图3-3 反色显示图片
图3-4 边缘提取图片
4.问题及解决方法
由于python之前很熟练,且安装比较繁琐,因此这里只研究有关进行机器视觉的问题。
(1)安装python-opencv问题
问题一:no module named cv2
在安装的时候,代码中有anaconda,但导入的时候,还会有no module named cv2问题。我的解决办法是在windows中,直接找到对应的cv2.pyd,拷贝到python路径中。这样就成功了:
图4-1 正确安装cv2
问题二:在安装的时候遇到:
图4-2 未找到opencv_python问题
在搜索问题的时候发现是pip没有更新,这个时候输入pip install –upgrade pip成功了。
(2)代码问题
问题三:
图4-3 未能阈值切割问题
这个是之前的阈值分割函数:
cv2.threshold(image,80,255,cv2.THRESH_BINARY)
应该有两个返回值,其中的ret是获得一些相关信息进行设置的,也需要带上。
问题四:
图4-4 未能找到图片问题
这个问题是因为直接获得读取信息的参数,是一个读取结果,需要先转化为灰度图才行,加上下面的第一行代码即可。
img_gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
# 对图像进行阈值分割,阈值设定为80,得到二值化灰度图
ret,image1 = cv2.threshold(img_gray,80,255,cv2.THRESH_BINARY)
# cv2.imshow('grayscale',image1)
猜你喜欢
- 2024-10-12 智能监测:皮带输送系统堵料问题的解决方案
- 2024-10-12 Python-OpenCV 10. 图像边缘算法 opencv边缘识别
- 2024-10-12 Net AI学习笔记系列第五章 net教程
- 2024-10-12 深度学习和神经网络——图像读取和显示
- 2024-10-12 十三句Python搞定找茬游戏 找茬游戏规则
- 2024-10-12 「深度学习」手把手教你用PythonOpenCV物体识别-识别水果
- 2024-10-12 python代码实现OpenCV 轮廓近似原理
- 2024-10-12 OpenCV找出图片中的圆并标注圆心 opencv检测圆代码
- 2024-10-12 分享3个干货满满的Python实战项目,点赞收藏
- 2024-10-12 OpenCV(28)——凸包 opencv轮廓凹凸
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)