机器能直接识别和处理的语言是,
本文是作者近期在学习机器学习和图像处理过程中的经验总结和重要知识点,文章不断更新。本文主要讲述图像识别前应该做的预处理工作.图像基础知识简介。
按照作者的理解,一个图像一般是一个三维数组。这个数组的长和宽代表图像的长和宽(长和宽分别代表水平和垂直的像素数),也就是图像的大小。例如,128128高度的图像表示水平和垂直像素分别为128。阵列的高度根据图像的格式而变化。如果它的高度在计算机中占据2位,我们称这样的图像为二值图像(所谓二值图像不是黑就是白,只有两种颜色);如果8位高,我们称这个图像为灰度图像。高值(即value)为0~255,0代表纯黑,255代表纯白,127代表纯灰,其余数值按比例向0,255两端逼近;如果它的高度是24bit,一般称为RGB模型(红、绿、蓝)的图像,三种背景色可以按照不同的比例混合成各种颜色。当然,除了二值图像、灰度图像、RGB图像之外,还有基于其他数学模型的图像,比如HSV模型(色调、饱和度、值),也是广泛使用的。模型之间可以相互转换,如果使用的话我们会解释下面的预处理。图像平移和缩放
图像平移就是把我们感兴趣的物体移到图像的中间,从而尽可能准确、定量地分析图像的特征。图像翻译有许多想法:
1)、裁剪法,直接通过数组操作,裁剪出感兴趣的区域(即感兴趣的域)并保存,剩下的丢弃。以python的numpy库为例如下:import numpy as npimport cv2 as cv#使用numpy库随机生成一个120120的RGB颜色图exm=np.random.randint(0,25,size=[120,120,3],dtype=np.uint8) ROI=EXM [0: 32,12: 66,] #剪出0~32的面积,12~66 #显示原图和感兴趣的域
2)、前景提取法,我们根据感兴趣域和非感兴趣域最典型的差异(如颜色、纹理、轮廓、边缘特征等)得到目标区域。).这里以图片中提取的香蕉皮为例进行简单说明:
import numpy as NP import cv2 as cv banana=Cv . im Read( banana . jpg )#阅读原文Hsv_bnn=cv.cvtColor(banana,Cv .COLOR_BGR2HSV) #将RGB颜色空间转换为HSV颜色空间叶民=np.array([20,5,5]) #设置颜色的上下限,主要是黄色范围Maxy=NP。数组([44,250,255]) MSK=CV。in range(HSV _ BNN MaxYe)# get mask bnn=cv . bitwise _ and(banana,banana,mask=MSK) cv.imshow (bnn ,bnn) #说明以上涉及到色彩空间转换。请点击此处了解HSV色彩空间的详细信息。之所以把RGB转换成HSV颜色模型,是因为香蕉皮颜色的色相值和背景图像的色相值差别很大,可以把它们分开。
关于图像的缩放,我们知道数组越大,计算机消耗的内存就越多,处理数组的时间就越长(这里涉及到评估一个算法的指标,即时间复杂度和空间复杂度)。作为一个大的图像阵列,如果不对图像大小进行处理,识别算法的效率会很低,因此在预处理时需要对图像大小进行调整。一般来说,我们尽量按照待识别物体的最低分辨率来选取小图像(所谓最低分辨率是指在某一显示器上能够分辨图像内容的最小像素数)。比如3232(比如识别手写数字)、128128(精度较低)、256256(精度较高的图像)等。一般512512的图像很大,除非有特殊要求,最好不要超过这个值。
下面给出基于opencv-python实现图像缩放的代码:
对于范围(10)中的I,pic _ len=512:a=cv . im read( bottle- str(I )。jpg) #读取图像l,w,h=a.shape #获取图像的属性#print(str(i) =,A. shape) # cv。imshow (original str (i),a) if l=w: #初步放大防止size=(round ((pic _ len/l) * w),pic _ len)else:size=(pic _ len round((pic _ len/w)* l))A=cv . resize(A,size) l,w,h=A . shape # print( After str(I)=,A . shape)# cv . im show( After str(I),A) #将图片调整为方形图片s=np dtype=NP . uint 8)* 255 if l=pic _ len and w=pic _ len:s[((pic _ len-l)//2):(l((pic _ len-w)//2):]=a[:] elif l pic_len and w=pic_len: s[:((pic _ len-w)//2):(w(pic _ len-w)//2):]=a[((l-pic c=cv。调整cv大小。imshow (str (i),c) # cv。imwrite (bo-str (i))。jpg ,c) # 256 * 256尺寸图片。上面的代码是批量处理一类同名同号图片的大小。首先,图片
上述图像预处理只是最基本的图像处理操作,此外还有形态学操作、阈值处理、图像滤波、直方图处理、轮廓处理、边缘检测等。更多基于opencv的图像处理将首先在微信官方账号“24K纯真实的过客”更新。欢迎学习交流!以上如有不妥或错误之处,欢迎评论指出!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。