PHP图像处理 OpenCV简明教程
发布时间:2022-09-15 12:39:51 所属栏目:PHP教程 来源:
导读: 无论我们想要学习如何将面部识别应用于视频流,还是用深度学习构建图像分类器,或者做其他一些有关图像识别的有趣项目,可能都会需要学一些OpenCV的知识,本文将做简单介绍。
加载和显示图像
保
加载和显示图像
保
无论我们想要学习如何将面部识别应用于视频流,还是用深度学习构建图像分类器,或者做其他一些有关图像识别的有趣项目,可能都会需要学一些OpenCV的知识,本文将做简单介绍。 加载和显示图像 保存上面的图片,打开你最爱的编辑器,输入以下代码: import cv2 image = cv2.imread('demo.jpg') cv2.imshow('Image', image) cv2.waitKey() 第3行,使用cv2.imread()导入图像。 第4行,使用cv2.imshow()显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,然后是我们的图像。 第5行,使用cv2.waitKey()等待键盘输入。 运行一下,结果如下所示: 获取并修改像素值 我们可以先查看一下图像的形状, print(image.shape) ## (600,400,3) image.shape可以获取图像的形状。返回的是一个包含行数(高),列数(宽),通道数的元组。 可以根据像素的行、列坐标获取其像素值。对于BGR图像来说,返回值为B,G,R的值。对灰度图像来说,返回值为其灰度值。 B,G,R = image[320,15] print('B={}, G={}, R={}'.format(B,G,R)) ## B=150, G=172, R=197 可以用类似的方式修改像素值, image[320,15] = [52,26,16] B,G,R = image[320,15] print('B={}, G={}, R={}'.format(B,G,R)) ## B=52, G=26, R=16 图像ROI 有时我们需要对一幅图像的感兴趣的区域(Regions of Interest,ROI)进行操作。比如,我们要检测一幅图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜素。ROI也是通过索引获得,其实就相当于数组切片。 import cv2 image = cv2.imread('demo.jpg') head = image[27:124,159:260] image[200:297,299:400] = head cv2.imshow('New', image) cv2.waitKey() 结果如下: OpenCV提供的函数cv2.resize()可以改变图像的尺寸大小。 import cv2 image = cv2.imread('demo.jpg') resized = cv2.resize(image, (200,400)) cv2.imshow('Image', resized) cv2.waitKey() 旋转图像 对一个图像旋转角度 θ\thetaθ,需要用到下面形式的旋转矩阵。 OpenCV允许我们在任意地方进行旋转,于是旋转矩阵的形式应该改为: 其中: 为了构建这个旋转矩阵,OpenCV提供了一个函数:cv2.getRotationMatrix2D()。 以下便是在不缩放的情况下将图像旋转90度。 import cv2 image = cv2.imread('demo1.jpg') rows,cols,depth = image.shape M = cv2.getRotationMatrix2D((rows // 2, cols // 2), 90, 1) dst = cv2.warpAffine(image,M,(cols,rows)) cv2.imshow('Image', dst) cv2.waitKey() 第5行,第一个参数为旋转中心,第二个参数为旋转角度,第三个为旋转后的缩放因子。 第6行,第三个参数是输出图像的尺寸。 在许多的图像处理过程中,我们必须模糊图像以减少高频噪声,使算法更容易检测和理解图像的实际内容。在OpenCV中模糊图像非常容易,有很多方法可以用。 import cv2 image = cv2.imread('demo1.jpg') blurred = cv2.GaussianBlur(image, (11, 11), 0) cv2.imshow('Blurred', blurred) cv2.waitKey() 第4行,我们使用了高斯模糊,用了11 x 11的核。 较大的核会产生更模糊的图像,较小的核将产生没那么的模糊图像。 绘图函数 本节我们将在导入的图像上画矩形,圆,线以及添加文字。但值得注意的是,这些操作会影响到原始导入的image,为了避免这样,我们可以用image的副本进行操作。 import cv2 image = cv2.imread('demo.jpg') output = image.copy() cv2.rectangle(output, (163, 30), (244, 124), (0, 0, 255), 2) cv2.imshow('Rectangle', output) cv2.waitKey() 第5行,设置的参数如下: 结果如下: 接下来,我们在猫咪的图像上画一个圆。 import cv2 image = cv2.imread('demo1.jpg') output = image.copy() cv2.circle(output, (32, 25), 20, (255,0,0),-1) cv2.imshow('Circle', output) cv2.waitKey() 要画圆的话,需要指定圆形的圆心坐标和半径大小。 第5行PHP图像处理,我们指定圆心为(35,25),半径大小为20。其他参数含义,和画矩形时一样。 画线的话,我们只需要指定起点和终点即可。 import cv2 image = cv2.imread('demo1.jpg') output = image.copy() cv2.line(output, (35,25),(125,69),(255,0,0),5) cv2.imshow('Line', output) cv2.waitKey() 第5行,我们指定起点为(35,25),终点为(125,69)。 结果如下: 我们可能经常需要在图像上添加文字,比如在进行人脸识别的时候,需要在人的脸上绘制出他们的名字。可以使用OpenCV的cv2.putText()函数在图像上添加文字。 import cv2 image = cv2.imread('demo.jpg') output = image.copy() cv2.putText(output, 'Sasaki Nozomi', (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.imshow('Text', output) cv2.waitKey() (编辑:应用网_镇江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐