网站首页 > 技术文章 正文
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-09-11 给3D Slicer添加Python第三方插件库
- 2024-09-11 使用Python创建自己的Instagram滤镜
- 2024-09-11 薅羊毛我愿称Python为最强,Python 自动化带你轻松赚钱
- 2024-09-11 史上最全的OpenCV入门教程!这篇够你学习半个月了!万字长文入门
- 2024-09-11 使用python实现简易的人脸检测(python人脸检测106关键点)
- 2024-09-11 Python-OpenCV 16. 图像特征检测与描述算法
- 2024-09-11 Flask—远程查看行空板USB摄像头视频
- 2024-09-11 OpenCV+Python识别车牌和字符分割的实现
- 2024-09-11 在Fedora中安装OpenCV-Python | 二
- 2024-09-11 使用Python实现增强现实(AR)(python图像数据增强)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)