一、什么是计算机视觉
计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。这里所指的信息指Shannon定义的,可以用来帮助做一个“决定”的信息。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。 视觉是各个应用领域,如制造业、检验、文档分析、医疗诊断,和军事等领域中各种智能/自主系统中不可分割的一部分。由于它的重要性,一些先进国家,例如美国把对计算机视觉的研究列为对经济和科学有广泛影响的科学和工程中的重大基本问题,即所谓的重大挑战(grand challenge)。 计算机视觉的挑战是要为计算机和机器人开发具有与人类水平相当的视觉能力。机器视觉需要图象信号,纹理和颜色建模,几何处理和推理,以及物体建模。一个有能力的视觉系统应该把所有这些处理都紧密地集成在一起。 我们目前如果是在校学生,对于计算机视觉和机器学习的相关知识的学习是非常有用的,无论是对于自己的工作前景还是相关论文的撰写都是非常有用的,而且目前对于计算机的相关知识已经设计到了各个专业领域,其中包括医学领域(计算机视觉分析CT成像)、电学领域(使用matlab及相关领域画图)、人脸识别和车牌识别等等。而且有想要做交叉学科的对于计算机可以和任意领域及进行无障碍交叉。 由于我这个理工男的语文功底并不好,语言组织能力不强,所以我们今天就啰嗦到这里,总结一下就是计算机视觉及机器学习等和计算机相关的东西特别重要!二、图片处理基础操作
首先我们来看一段简单的计算机视觉相关代码:
import cv2img=cv2.imread('path')#path指图片相关路径cv2.imshow('Demo',img)cv2.nameWindow('Demo')cv2.waitKey(0)cv2.destroyAllWindows()
这段代码就可以在计算机中显示出img的相关图像。接下来我们讲解一下每一步的相关操作。
图片处理:读入图像
相关函数:image=cv2.imread(文件名相关路径[显示控制参数])
文件名:完整的路径。
其中参数包括:
cv.IMREAD_UNCHANGED :表示和原图像一致
cv.IMREAD_GRAYSCALE : 表示将原图像转化为灰色图像。
cv.IMREAD_COLOR:表示将原图像转化为彩色图像。
例如:cv2.imread(‘d:image.jpg’,cv.IMREAD_UNCHANGED)
图片处理:显示图像
相关函数:None=cv2.imshow(窗口名,图像名)例如:cv2.imshow(“demo”,image)
但是在OpenCV中我们图像显示还是要加上相关约束:retval=cv2.waitKey([delay])
如果没有这个限制,那么显示的图像就会一闪而过,就会发生错误。其中delay参数包括:dealy=0,无限等待图像显示,直到关闭。也是waitKey的默认数值。delay<0,等待键盘点击结束图像显示,也就是说当我们敲击键盘的时候,图像结束显示。delay>0,等待delay毫秒后结束图像显示。最后我们还需要显示
cv2.destroyAllWindows()
把图像从内存中彻底删除。
图片处理:图像保存
相关函数:retval=cv2.imwrite(文件地址,文件名)
cv2.imwrite(‘D:test.jpg’,img)
将img保存到了路径D: est.jpg
三、图像处理入门基础
图像成像原理介绍
首先我们第一个要深深深深的刻在脑子里的概念就是: ——图片是由像素点构成的 生动一点表示就是这样: 这样就可以完美的展示出计算机图像的成像原理,就是用一个个有颜色的像素点拼接而成的。图像分类
图像一般分为三类:四、像素处理操作
读取像素
相关函数:返回值=图像(位置参数) 我们先以灰度图像,返回灰度值:p=img[88,142]
print§
这里我们就可以返回图片坐标[88,142]处的灰度值。
然后我们以彩色图像为例子:
我们知道彩色图像由BGR三个通道的值构成。那么我们需要返回三个数值:blue=img[78,125,0]
green=img[78,125,1]
red=img[78,125,2]
print(blue,green,red)
这样我们就返回了这三个数值。
修改像素
直接暴力修改。 对于灰度图像, img[88,99]=255 对于彩色图像, img[88,99,0]=255 img][88,99,1]=255 img[88,99,2]=255这里也可以写成 img[88,99]=[255,255,255]等同于上方。 改动多个像素点 例如还是以彩色图像为例子:i[100:150,100:150]=[255,255,255]
意思也就是将图像横坐标100到150和纵坐标100到150的这个区间全部用白色替代。
使用python中的numpy修改像素点
读取像素 相关函数:返回值=图像.item(位置参数) 我们以灰度图像为例: o=img,item(88,142) print(o) 对于彩色图像我们还是: blue=img.item(88,142,0) green=img.item(88,142,1) red=img.item(88,142,2) 然后print(blue,green,red) 修改像素 图像名.itemset(位置,新的数值) 我们以灰度图像为例子: img.itemset((88,99),255) 对于BGR图像: img.itemset((88,99,0),255) img.itemset((88,99,1),255) img.itemset((88,99,2),255)import cv2
import numpy as np
i=cv2.imread('path',cv2.IMREAD_UNCHANGED)
print(i.item(100,100))
i.itemset((100,100),255)
print(i,item(100,100))
通过这段代码我们就可以看得出来像素的更改。 对于彩色图像也是一样。
五、获取图像属性
形状
shape可以获取图像的形状,返回值包含行数、列数通道数的元组。 灰度图像返回行数列数 彩色图像返回行数、列数、通道数。import cv2
img1=cv2.imread('灰度图像')
print(img1.shape)
像素数目
size可以获取图像的像素数目。 灰度图像:行数列数 彩色图像:行数列数*通道数图像类型
dtype返回的是图像的数据类型import cv2
img=cv2.imread('图像名称')
print(img.dtype)
六、图像ROI
ROI(region of interest)表示感兴趣区域从被处理的图像中以方框、圆、椭圆或者不规则多边形等方式勾勒出需要处理的区域。
可以通过各种算子(operator)和函数来求ROI,并进行下一步操作。
import cv2
import numpy as np
a=cv2.imread('path')
b=np.ones((101,101,3))
b=a[220:400,250:350]
a[0:101,0:101]=b
cv2.imshow('o',a)
cv2.waitKey()
cv2.destroyAllWindows()
我们还可以将感兴趣的图像加入到别的图像当中。
七、通道的拆分与合并
拆分import cv2
img=cv2.imread('图像名')
b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]
我们在OpenCV中有专门拆分通道的函数: cv2.split(img)import cv2
import numpy as np
a=cv2.imread("imagelenacolor.png")
b,g,r=cv2.split(a)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()
合并import cv2
import numpy as np
a=cv2.imread("imagelenacolor.png")
b,g,r=cv2.split(a)
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)
cv2.waitKey()
cv2.destroyAllWindows()
我们将上方的拆分图像进行merge合并就可以得到以下结果:
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !