当前位置: 首页 > 科技观察

当Python也来修图神器的时候,发现真的很好用!!

时间:2023-03-18 18:40:40 科技观察

今天给大家分享一下Python在图像处理中的具体应用。既然是图像处理,就不得不提到opencv模块。该模块支持许多与计算机视觉和机器学习相关的算法。并且应用领域日益扩大,大致有以下几个领域。物体识别:通过视觉和内部存储对物体进行判断、图像分割、人脸识别、汽车安全驾驶、人机交互等。当然,这次我不打算涵盖这么高级的内容。今天就从图像中最基本的opencv模块说起基本操作。模块安装模块安装通过pip命令完成。pipinstallopencv-pythonpipinstallopencv-contrib-python对图片的各种操作学过线性代数,对肯定矩阵并不陌生。图像本质上是一个矩阵。灰度图像是一个普通矩阵,而彩色图像是一个多维矩阵。我们对图像的操作可以很自然地转化为对矩阵的操作。要读取图像,让我们先读取图像,调用cv2.imread()方法。其语法格式如下:cv2.imread(filename,flag=1)其中flag参数用于设置读取图像的格式,默认为1,表示以RGB三通道格式读取,如果设置为0,表示以灰度单通道模式读取,importcv2importnumpyasnpimg=cv2.imread('1.jpg',0)显示图像读取图像后,我们希望显示出来。这里使用的函数方法是cv2.imshow(),语法格式如下cv2.imshow(name,img)参数解释如下:name:表示显示窗口的名称img:显示窗口的矩阵形式image我们尝试显示上面读取的图像,代码如下cv2.imshow("grey_img",img)##如果使用cv2.imshow()函数,后面必须跟一个函数cv2.destroyAllWindows(),破坏窗户。我们运行上面的代码后,可以发现瞬间弹出了图片,还没有等我们看清楚图片。出现后直接关闭。原因是cv2.imshow()函数方法没有延时函数。我们添加一个延迟函数。代码如下importcv2importnumpyasnpimg=cv2.imread('1.jpg')cv2.imshow("grey_img",img)cv2.waitKey(0)cv2.destroyAllWindows()输出保存图片最后我们保存了图片,这里用到的函数是cv2.imwrite(),其语法格式如下cv2.imwrite(imgname,img)参数解释如下:imgname:要保存的图片的名称img:矩阵形式图片示例代码如下:importcv2importnumpyasnpimg=cv2.imread('1.jpg')cv2.imshow("grey_img",img)cv2.waitKey(0)cv2.imwrite('1.png',img)cv2.destroyAllWindows()图片的各种属性有时候我们想知道图片的像素大小,而图片的本质就是Matrix,比如一张1024像素*960一个像素的图片表示矩阵的行数为960,列数为1024。opencv模块中调用的shape()函数方法,代码如下:importcv2img=cv2.imread('1.jpg')print(img.shape[0])#行数print(img.shape[1])#列数print(img.shape[2])#通道数output3083403你可以看到图片的像素是340*380,通道数是3,对于灰度图,我们看图片的属性,代码如下:img=cv2.imread('1_grey.png',0)print(img.shape)output(308,340)可以看出,对于灰度图,我们看不到通道数,只有行数和列数对图像的基本操作最后,我们会对图像进行一些基本的操作,无非就是改变一些像素值,我们导入一张空白图像,通过修改像素值给它添加一个黑点,代码如下importcv2importnumpyasnpimg=cv2.imread('2.jpg')(x,y,z)=img.shapeforiinrange(-10,10):forjinrange(-10,10):#图像的位置图像中心改变像素值,img[int(x/2)+i,int(y/2)+j]=(0,0,0)cv2.imshow("img",img)cv2.waitKey(0)cv2.destroyAllWindows()输出